Karel de Grote-Hogeschool

            Katholieke Hogeschool Antwerpen

            Departement Industriële Wetenschappen en Technologie

            Campus Hoboken

 

 

               

 

            

 

   

 

 

 

 

 

3D Computergestuurde Graveermachine

 

door Thierry LOREYN

 

 

 

 

 

 

 

 

Promotor: Wim Van Weyenberg

 

 

 

 

 

 

 

 

 

 

                                                                                          Proefschrift tot het behalen van de graad van

                                                                                          Bachelor in de Elektronica - ICT,

                                                                                          Hoboken, juni 2008

 


 

 

 

Voorwoord

 

In dit derde en laatste jaar “ bachelor in de Elektronica-ICT “ dienen we een eindwerk te maken.

Dit om al de opgedane kennis te beproeven.  Hiervoor kregen we een stagebedrijf toegewezen.

 

Echter droomde ik er al lang van om de mechanische achtergrond (elektromechanica in het middelbaar onderwijs) te combineren met de elektronische kennis die we op KdG opdeden.

 

Hiervoor diende ik twee voorstellen in.

Het 3D Computergestuurde Graveermachine haalde het. Dit mocht ik als eindwerk ontwerpen, en realiseren. Zo werd KdG mijn stagebedrijf.

 

Met dank aan Dhr. Koen Heylen.

 

 

 

 

 

 

 

 

 

 

 

Dankwoord

 

Graag zou ik in dit dankwoord enkele mensen bedanken.

 

-         Mijn Promotor : Dhr. Wim van Weyenberg voor zijn tijd, en professionele ondersteuning.

-         Dhr. Koen Soontjens waar ik ook altijd terecht kon.

-         Dhr. Koen Heylen die het mogelijk maakte om dit ontwerp te realiseren als eindwerk.

-         Alle andere docenten van de opleiding voor het inzicht in de electronica-ICT

-         KdG als stagebedrijf voor de aangename werksfeer

-         Mijn medestudenten voor de leuke jaren die we hadden !

-         Mijn zust voor het naleeswerk

-         Maar vooral ook mijn ouders voor hun steun.

 

 

 

Bedankt !

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Opdrachtomschrijving

 

 

   Ontwerp, Constructie en sturing van een 3D graveermachine.

 

De bedoeling is dat er printplaten (baantjes) kunnen gefreesd worden, maar vooral TEKST en eventueel voorgeprogrammeerde figuren kunnen gegraveerd worden.

 

Hiervoor moet hetvolgende uitgewerkt en ontworpen worden;

 

·        Een mechanische constructie, die een freeskop 3 dimensionaal kan bewegen.

      Als materiaal worden assen/motoren gebruikt uit verkregen afgedankte toestellen.

De opbouw van de machine X- Y- en Z-as moet voor december klaar zijn !

 

·        De aandrijving van de X- Y- en Z-as moet gebeuren met stappenmotoren.

Voor elke stappenmotor dient een verschillende (elektronische) sturing opgebouwd en uitgewerkt te worden.

 

·        Het moet mogelijk zijn de machine zowel hardwarematig, als softwarematig te sturen.

 

·        De machine moet in staat zijn G-Codes te verwerken van CAD-programma’s.

 

·        Het maken van een scriptie, en toelichten van alle elektronica + programatie in detail.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Opm.:  De mechanische constructie mag eenvoudig gehouden worden, en moet niet verder toegelicht worden. (de nadruk ligt op de Elektronica)

 

 

 

 

 

 

 

 

Inleiding

 

Tijdens het lezen van dit eindwerk zal blijken dat elk onderdeel modulair opgebouwd is.

 

Hierdoor kon tijdens het ontwerp elk onderdeel afzonderlijk op zijn werking getest worden.

Na het afwerken van elk onderdeel, werd het samenbracht op het geheel, en weer getest.

Pas na een goed resultaat werd het volgende onderdeel vervaardigd.

 

Op deze werkwijze is heel de machine opgebouwd.

De volgorde waarmee de verschillende hoofdstukken zullen worden behandeld zijn gelijk aan de opbouwvolgorde van de machine, met uitzondering van de voeding.

 

 

Wat is er terug te vinden in dit eindwerk en wat niet?

 

Elk onderdeel is eerst uitvoerig getest op breadboard, en vervolgens op PCB vervaardigd.

Uiteraard was niet alles op breadbord meteen een succes, sommige schakelingen zijn na testen aangepast. Andere zijn gewoon gestopt wegens slechte werking, en hernomen.

 

Enkel wat werkt, en dus uiteindelijk op PCB gekomen is heb ik beschreven !

Al (de miserie J) wat aan de werking vooraf ging niet !

 

 

 

Besluit

 

·        De machine wordt compacter (opplooibaar) als de brug naar Y-Z-slede wordt doorgezaagd, en vervolgens scharnierend wordt opgesteld. (Dit is iets voor na de presentatie)

 

·        Met onderdelen uit afbraak (en bij houden) kan veel geld worden bespaard.

 

·        De assen waarover de sleden geleiden zijn niet echt zwaar genoeg om zwaar freeswerk te doen, eveneens de motoren die ze aandrijven. Dit kan opgelost worden door krachtigere motoren.

 

·        De X-slede wordt bewogen door middel van een snaar, wat handig is omdat de slede snel met de hand kan worden verschoven. Echter is dit niet zo nauwkeurig als schroefdraad.

 

·        Bij vervaardiging van een eventuele volgende gelijkaardige machines, kunnen alle componenten bijeengeperst worden op één kant en klare print, en is modulaire opbouw niet meer nodig.

 

·        De stuurschakeling met mosfets levert het beste resultaat van de drie. (Y-AS)

 

·        De stuurschakeling met mosfets, is tevens ook de goedkoopste, althans als je rekening houd met het koelelement dat niet moet worden gebruikt/gekocht.

 

·        De dimmer voor de freeskop zou eigenlijk weldegelijk moeten uitgevoerd worden met een filternetwerk (spoel) althans als storingen/ruis belangrijk is om te vermijden (altijd).

 

·        Ipv. op zoek te gaan naar krachtigere stappenmotoren, kan het geheel ook gestuurd worden doormiddel van DC motoren een daarop een terugkoppeling realiseren. (soort servo)

Let wel:   Hierdoor veranderd bijna heel het ontwerp…

 

 

 

 

Samenvatting (Abstract)

 

 

3D computergestuurde graveermachine gelijkaardig aan een klein CNC frees machientje.

De mechanische constructie is zo veel mogelijk uit recyclage onderdelen opgebouwd.

De drie assen worden aangedreven door stappenmotoren, voor elke motor is een driver voorzien. De drivers zijn opgeboud met H-bruggen. Deze H-bruggen worden elk met hun eigen microcontroller (µC) gestuurd. De microcontrollers zijn geschreven in de C-taal. De machine kan  serieel (RS-232) of parallel (LPT) gestuurd worden, dit door middel van G-codes. Via de parallelle computersturing wordt er gebruik gemaakt van bestaande CNC software. Optisch ontkoppeling is voorzien, zodat de pc niet rechtstreeks in verbinding staat met de machine. Ook is er een manuele bediening voorzien, de keuze tussen computersturing en manuele bediening wordt gemaakt met een multiplexer (MUX). Op het LCD scherm kan statusinformatie afgelezen worden. Met de dimmer kan de snelheid van de freeskop geregeld worden. De optionele stofzuiger, en freeskop kunnen aangezet worden met de one-toutch schakeling (flipflop geheugen).

Het geheel is gevoed met een ATX computervoeding.

 

Als extra-tje is een eigen interface (in VB) en eigen postprocesor (in C) geschreven. Hiermee kunnen rechte lijnen gegraveerd worden, steunend op het bresenham algoritme.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bibliografie

 

-         Vanheste J., Het handboek voor Internet- en Intranet-technologie,

derde druk, Pearson Education Benelux, 2004

 

-         Pollefiet J., Elektronische vermogencontrole,

zesde druk, Academia Press, 2004

 

-         Soontjens K., Digitale Elektronica,

Hoboken, KdG Departement Industriële wetenschappen en Technologie, 2004

 

-         Maxim Dallas-Semiconducters, Switch Bounce and Other Dirty Little Secrets,

http://www.maxim-ic.com/appnotes.cfm/an_pk/287

 

-         Nanfara F., ea., The CNC Workbook,

Addison-Wesley Publishing Compnay, 1994

 

-         Nota van Kelly Ware, KCAM 4 CNC control software,

Revision 4.0.24, Kelly Ware, 2007 (KCAM handleiding)

 

-         Uwe Altenburg, “M16C-mini-boardmet grafisch display – programmeerbaar in C en BASIC” Elektor (Elektuur), Mei 2008, nr. 535, blz. 16-23

 

-         CNCezPRO, “CNC G Codes Definitions Examples Programs Programming Learning Training”, internet,  (april 3008),  (http://www.cncezpro.com/gcodes.cfm)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Inhoudstafel

 

1. Afspraken. 10

1.1. Het Assenstelsel 10

2. Mechanische constructie. 11

2.1. Langsrichting (X-as) 12

2.2. Dwarsrichting (Y-as) 13

2.3. Hoogterichting (Z-as) 14

2.4. Bevestiging Frees. 15

2.5. Bedieningspaneel 15

2.6. Spanplaat 15

3. De Stappenmotor 16

3.1. Waarom een Stappenmotor 16

3.2. Wat is één stap?. 16

3.3. Soorten Stappenmotoren. 16

3.3.1. Unipolaire Stappenmotor 17

3.3.2. Bipolaire Stappenmotor 17

3.3.3. Compatibiliteit 17

4. Stuurlogica. 18

4.1. Unipolaire Stuurlogica. 18

4.2. Bipolaire Stuurlogica. 20

5. De H-brug. 21

5.1. Werking H-brug. 21

5.2. Dubbele H-brug. 22

6. De gebruikte motorsturingen (voor mijn ontwerp) 23

6.1. Motorsturing Langsrinchting (X-as) 23

6.1.1. Het schema. 24

6.1.2. De print(PCB) 24

6.1.3. Gebruikte componenten. 25

6.2. Motorsturing Dwarsrichting (Y-as) 26

6.2.1. H-brug PCBy 26

6.2.1.1. Het schema. 26

6.2.1.2. De print 26

6.2.1.3. Uitleg Schema. 27

6.2.2. Logica PCBy 28

6.2.2.1. Schema van het µC bordje. 28

6.2.2.2. Programma voor de µC(PIC16F84A) voor het logica bordje. 29

6.2.3. Gebruikte componenten. 30

6.3. Motorsturing Hoogterichting (Z-as) 31

6.3.1. H-brug PCBz 31

6.3.1.1. Het Schema. 31

6.3.1.2. De print 32

6.3.1.3. Uitleg Schema. 32

6.3.2. Logica PCBz 33

6.3.2.1. Logica van deze print 33

6.3.2.2. Schema van het µC bordje. 33

6.3.2.2. Print van het µC bordje. 33

6.3.2.4. Programma voor de µC(PIC16F84A) 34

6.3.3. Gebruikte Componenten. 35

7. LCD Scherm.. 36

7.1. Wat is een LCD.. 36

7.2. Aansturing. 36

7.3. LCD driver 36

7.3.1. ControleBus. 36

7.3.2. DataBus. 37

7.3.2.1. Werkmodi 37

7.3.2.2. Instructiesignalen. 37

 

7.3.2.3. Datasignalen. 37

7.4. LCD contrast 38

7.5. LCD backlight 38

7.6. LCD debuggen. 38

7.7. Stuur programma voor LCD scherm.. 39

8. De multiplexer. 40

8.1. Wat is een multiplexer?. 40

8.2. Toepassingsgebied. 40

8.3. Waarom een MUX?. 40

8.4. Selectingang. 40

8.5. Schema van de MUX.. 41

8.6. MUX SN74LS157. 41

8.6.1. Bestaande MUX.. 41

8.6.2 Inwendig Schema. 42

8.6.3. Het schema. 42

8.6.4. De print 43

8.6.5. Gebruikte componenten. 43

9. Bedieningspaneel 44

9.1. Manuele bedieningsprint 44

9.1.1. Het schema. 44

9.1.2. De print (PCB) 44

9.1.3. Gebruikte componenten. 44

9.2. One-touch print 45

9.2.1. Opbouw.. 45

9.2.2. Werking flipflop. 45

9.2.2.1. Mechanische analogie. 45

9.2.2.2. Elektronische werking. 45

9.2.2.3. D-flipflop. 47

9.2.2.4. Dual D-Flipflop CD4013BC.. 48

9.2.3. Principeschema. 48

9.2.3.1. Dender 49

9.2.4. Het schema. 49

9.2.5. De Print 50

9.2.6. Gebruikte Componenten. 50

9.3. Dimmer 51

9.3.1. Werking. 51

9.3.1.1. Triac (TRIode for Alternating Current) 51

9.3.1.2. Diac (DIode for Alternating Current) 51

9.3.2. Het Schema. 52

9.3.3. De print 52

9.3.4. Gebruikte componenten. 52

10. Eindeloopschakelaars. 53

10.1. Wat is een eindeloopschakelaar ?. 53

10.2. Interne opbouw lichtsluis. 53

10.3. Schakeling. 53

10.3.1. Printontwerp. 53

10.4. Monteerbare lichtsluis. 54

10.4.1. Interne opbouw GP1A51HR.. 54

10.5. Gebruikte componenten. 54

11. De microcontroller. 55

11.1. Wat 55

11.2. Voordelen / Nadelen van een µC.. 55

11.2.1. Voordelen. 55

11.2.2. Nadelen. 56

11.3. Benodigdheden. 56

11.3.1. De Programmeer omgeving. 56

11.3.2. De header files. 56

11.3.3. De compiler 57

 

11.3.4. Programmer Software. 57

11.3.5. Programmer Hardware. 57

11.3.5.1. Programmer Hardware voor de PIC.. 58

11.3.5.2. Programmer voor de DS89c450. 59

12. De hoofd µC.. 61

12.1. Waarom Dallas Maxim DS89c450. 61

12.2. Behuizingen. 61

12.3. Aangesloten periferie. 61

12.4. Het programma. 62

13. De Voeding. 68

13.1. ATX-voeding. 68

13.1.1. Waarom ATX-voeding?. 68

13.1.2. De Voedingsconnector (molex) 68

13.1.3. Soft power on. 68

14. CNC (Computer Numerical Control) 69

14.1. KCAM.. 69

14.1.1. Waarom KCAM.. 69

14.1.2. KCAM kalibreren. 70

14.1.2.1. Freestafel parameters. 70

14.1.2.2. Parallelle poort parameters. 70

14.1.2.3. Andere parameters. 71

14.2. Andere leuke software. 71

14.2.1. DeskEngrave. 71

14.2.2.. Andere leuke software. 71

15. Extra’s. 72

15.1. Optische ontkoppeling. 72

15.1.1. Wat 72

15.1.2. Hoe. 72

15.1.3. Werking. 72

15.1.4. Het schema. 73

15.1.5. De print 74

15.1.6. Gebruikte componenten. 74

15.2. Seriële aansturing (RS-232) 75

15.2.1. Serieel  KCAM 4. 75

15.2.1.1.MaxStepper 75

15.2.1.2. Eigen CNC software. 76

 

 

 

 

Inhoudstafel bijlagen

 
 

 

 


I. De prints  (Op ware grootte) 81

II. ASCII tabel 86

III. ASCII tabel voor LCD driver 86

IV. Parallelle poort (LPT) 87

V. Null-modem.. 87

VI. Bresenham testjes. 88

VII. Enkele G-codes coor freesmachines. 89

VIII. Tools. 91

VX. Kostprijs. 92

X. Eindwerk Agenda. 95

XII. Voor geďnteresseerden. 95

 

 

 

 


 

 

 

1.        Afspraken

 

 

Alvorens van start te kunnen gaan moeten eerst essentiële afspraken gemaakt worden, die in de verdere opbouw van de machine moeten gerespecteerd worden. Indien dit niet gebeurt, komen er vroeg of laat problemen !

 

Deze afspraken zijn ‘de standaard’ voor bijna alle CNC freesmachines.

 

Door deze afspraken te respecteren, zullen we later de mogelijkheid hebben, om zonder problemen bestanden en g-codes van allerhande programma’s te importeren, zoals Autocad, Multisim, Protel, graveersoftwaren, enz…

 

 

 

1.1.  Het Assenstelsel

 

Het assenstelsel is gebaseerd op ‘De rechterhandregel voor machine coördinaten’.

De handpalm licht hierbij horizontaal, terwijl men met de neus voor de machine staat.

Men zegt gewoon  ‘ X Y Z’ met de bijbehorende beweging.

 

                            

 

 

Let hier vooral op de ‘+’. 

De richting waarin de vingertop wijst, bepaald de positieve bewegingsrichting van de AS.

Bewegen van de vingertop weg, is een negatieve beweging!

 

 

Het is duidelijk;      Als dit principe niet gerespecteerd word, dan wordt het verdere ontwerp een  puinhoop!

En dit vooral bij het schrijven van software.

 

Dus vanaf nu spreken we over   MotorX  ,  MotorY  en  MotorZ  (en niet 1 , 2 en 3)

                                                      X-As         Y-As            Z-as

 

 

 

 

2.        Mechanische constructie

 

De mechanische constructie licht ik even kort toe. Omdat het hier vooral om de aansturing en het elektronische gaat.

 

De schetsen, technische tekeningen + afmetingen, berekeningen

en constructievolgorde zijn hier dus weg gelaten.

 

Echter kan de elektronica niet zonder de mechanica, vandaar deze korte beschrijving.

 

 

Bedenkingen vooraf;

 

In de meeste CNC freesmachines staat de freeskop vast en beweegt de spanklem, meestal door middel van een zwaluwstaartgeleiding.

 

Omdat mijn ontwerp uiteraard geen gigantische machine ging worden, heb ik gekozen om de freeskop te laten bewegen. Zo is er toch de mogelijk om redelijk zware gewichten onder de frees te leggen. (Tevens is er dan de mogelijkheid om stukken onder de freeskop te schuiven).

 

Omdat het te frezen werkstuk niet moet meegetrokken worden, kan alles lichter uitgevoerd worden.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Opm.:

  Op het moment dat

  deze foto is genomen, is de

  machine nog niet helemaal klaar !

 

2.1.        Langsrichting (X-as)

De langsinrichting heb ik niet geheel zelf gemaakt. Deze komt uit een oude afgedankte A3-scanner van Agfa. (Van het containerpark van onze school.)

 

Deze is volledig uitgekleed, en een nieuw leven gegeven, al is het enkel maar het onderste gedeelte dat ik ervan gebruikte. (voor de X-inrichting)

 

 

 

 

De grondplaat zag er als volgt uit;

 

 

 

 

 

 

 

In het midden een rond geslepen en ondersteunde as, waarop een meenemer geleidt die op een ronde axiale geleider zit.

De meenemer wordt meegetrokken door een snaar, de snaar wordt op haar beurt getrokken door de stappenmotor. (zie rechtsachter op de figuur.) Verder zitten aan de zijkant 2 koperen geleiders.

 

 

Wat zelf bijgebouwd is:

 

Op de meenemer zit de volger die met kogellagers over de koperen geleiders rolt. (Zoals in de figuur te zien)

 

Achteraf is dit verstevigd met een bijkomende kogellager. Dit om de schokken die veroorzaakt worden tijdens het omkeren van richting op te vangen.

 

Links en rechts zijn hiertegen rechtopstaande profielen bevestigd. Deze vormen de brug naar de Y-inrichting

 

Aan de grondplaat is het volgende veranderd:

      

-   De afmetingen, omdat deze in de PVC voet zou vallen

-   Uitsparing voor wegwerken voeding

-   Gaten voor montage en elektrische leidingen

-   Versteviging tegen doorbuigen met twee houten balkjes

-   Bevestigingsbeugels voor werkoppervlak

 

 

 

2.2.        Dwarsrichting (Y-as)

 

 

 

 

De dwarsrichting bestaat zoals te zien op de figuur uit het volgende:

 

·        Een rechthoekig kaderment

Dit bestaat uit 4 aan elkaar gelaste L-profielen, waarin gaten voorzien zijn waar de assen is passen.

 

·        2 assen

Afkomstig uit twee printers van HP (690c)

 

·        1 draadstang

De draadstang is op lengte gemaakt en afgedraaid op de maat van de kogellagers.
Eerst was het een gewone, maar omdat die roestte, heb ik ze vervangen door een inoxen.
Omdat deze inox minder mee plooide, moet de uitlijning perfect zijn!

 

·        2 lagers

Dit zijn twee kleine skf lagers van 6mm binnendoormeter, voorzien van een lagerbeschermerkapje.

 

·        1 menemer.

Dit is een moer die is vastgelast op een plaatje. Zodat het plaatje vooruit of achteruit zal draaien door de verdraaiing van de as.

 

·        2 geleibusjes die over de assen geleiden.

De geleibussen zijn de insteekpinnetjes van automaten (steekzekeringen).

 

 

 

 

 

 

 

2.3.        Hoogterichting (Z-as)

 

Op de dwarsrichting zit de hoogterichtig. Deze bestaat uit het volgende:

 

·        Een rechthoekig kaderment.

Hierop zijn vier moeren gelast van M10. Hierin zitten de koperen bussen van de zekeringen, die voor een goede geleiding moeten zorgen.

 

De moeren zijn zoals op de figuur te zien eerst op een metalen plaatje vastgespeet, en daarna terug in lijn gezet om torsie te vermeiden (tijdens het lassen), en dan verder vastgelast.

 

Als deze twee plaatjes af waren, zijn ze met vijsjes(regeling mogelijk) vastgezet op het kaderment. Wanneer de uitlijning goed was, zijn beide plaatjes op het kaderment vastgelast.

 

 

·        2 assen

De twee assen van de hoogterichting zijn afkomstig van een oud faxtoestel (Container KdG)  Om de assen mooi uit te lijnen heb ik twee houten blokjes eerst los door geboord, zodat de gaten in lijn lagen, vervolgens hierover de moeren geschoven, en bijbehorende koperen geleibusjes.

Dan op de 4 moeren het meeneemplaatje vastgelast, hierdoor kan het geheel weer niet wegtrekken tijdens het lassen, en ligt zeker alles in lijn.

 

 

·        2 lagers

Om de schroefdraad van de Z-inrichting soepel te laten draaien.

 

·         Meenemer

Deze is hierboven te zien op de figuur.

 

 

 

2.4.        Bevestiging Frees

 

De freeskop is een dremel, of een dremel compatibele machine.
Deze past in de meenemer die op de Z-slede zit.

 

Tevens heb ik de freeskophouder voorzien van een stifthouder.
Het stiftje kan met 2 boutjes vastgezet worden.

 

 

 

 

 

2.5.        Bedieningspaneel

 

Met het bedieningspaneel kan het volgende gedaan worden:

 

-         Bedienen van de 3 assen          (zie ‘touch switch’).

-         Aanzetten Freeskop                (zie ‘one touch switch’)

-         Kiezen tussen manuele en computergestuurde bediening.

-         Aflezen statusinformatie           (zie LCD)

-         Aanzetten optionele stofzuiger

-         Contrastregeling van het LCD scherm

-         Voedingsspanning aan/uit zetten

 

Opm:    Op het toetspaneel links (manuele jogcontrol) moet nog een stikker met pijlen geplakt worden, zodat de onderliggende toetsen niet meer zichtbaar zijn.

 

 

 

 

 

2.6.        Spanplaat

 

Met de Spanplaat kunnen werkstukken op de machine gespannen worden, dit door middel van boutjes (M6)

 

 

 

 

 

 

 

 

 

 

 

 

 

3.        De Stappenmotor

 

 

3.1.  Waarom een Stappenmotor

 

Een stappenmotor maakt stapjes, zoals de naam al deed vermoeden. Dit wil zeggen dat hij niet tegen een constant toerental draait, zoals een gewone DC-motor, maar hij kan dit echter wel.
Het voordeel van deze motor is dat hij een aantal stappen kan doorlopen. Zo weten we precies wat de stand van de motor-as is.

Doorgaans is een stappenmotor niet zo krachtig. (Met de hand tegen te houden)
Stappenmotors zijn echter geen krachtpatsers.

De eisen die aan dit soort motors worden gesteld zijn meestal niet om krachtig te zijn, maar om nauwkeurig te zijn. Toch bestaan er grotere stappenmotoren die een koppel kunnen leveren van meer dan 40Nm.

 

Let wel: Hoe sneller een stappenmotor draait, hoe minder krachtig hij wordt!

 

 

Waar te vinden:

Stappenmotoren zijn sowieso altijd te vinden in printers, faxapparaten, plotters, kopieermachines, diskdrives, scanners, enz… Enkel het te leveren koppel kan soms wel onvoldoende zijn om in andere toepassingen te gaan gebruiken…

De stappenmotors die ik hier gebruikte zijn afkomstig van een A3scanner en een plotter.

 

      Opm.: Een stappenmotor is geen Servomotor, (Servo’s zijn hier niet besproken).

 

 

 

3.2.  Wat is één stap?

 

     De Grootte van een stap hangt af van stappenmotor tot stappenmotor.

      In de meeste gevallen is dit op de kenplaat van de motor af te lezen.

      Doorgaans zal één stap  1,5°  ŕ  1,8°   zijn.

Het is echter mogelijk om het aantal graden voor één stap nog eens te halveren dit noemt men  “half stepping”, maar daarover later meer.

 

 

 

3.3.  Soorten Stappenmotoren

 

Elke stappenmotor werkt op gelijkspanning.
Er bestaan unipolaire en bipolaire stappenmotoren.

Komen er  5, 6 of 8 draden uit de stappenmotor, dan is het hoogstwaarschijnlijk een unipolaire stappenmotor. Bezit de motor vier draden dan is het een bipolaire stappenmotor.

Om te weten met welke spoeldraad je te doen hebt is uitmeten nodig.

Dit wordt duidelijk aan de hand van de figuren op de volgende blz.

 

Opm.:   Koop je een nieuwe stappenmotor, dan vind je natuurlijk in de datasheets van de motor de bijbehorende aansluitingen.

 

 

3.3.1.  Unipolaire Stappenmotor

 

      Het voordeel van een unipolaire stappenmotor is dat hij eenvoudig aan te sturen is.

De middenaftakking wordt permanent aan één kant van de voeding gehangen (+ of - klem). De vier andere draden worden dan afwisselend wel of niet bekrachtigd. Het wordt al snel duidelijk dat bij deze schakelwijze de motorwikkelingen niet erg efficiënt gebruikt worden. Er is telkens maar Ľ de van de beschikbare motorspoel bekrachtigd.

5 draden

6 draden

8 draden

    

 

 

 

 

 

 

 

 

 

Het is niet altijd even duidelijk welke draad bij welke spoel hoort, of welke draad de middenaftakking is. Dit kan gevonden worden door met de multimeter een weerstandsmeting te doen op de draden. Plots zul je op één draad de halve ohmse waarde meten dan op en andere draad, dan heb je de middenaftakking tepakken !

 

    

3.3.2.        Bipolaire Stappenmotor

 

Bipolaire stappenmotoren zijn efficiënter in het gebruik van de motorwikkelingen, maar moeilijker aan te sturen dan unipolaire stappenmotoren. Hiervoor zijn twee zogenaamde H-bruggen nodig  “Dubbele H-brug” genaamd. (hierover verder meer)

           

4 draden

Bipolaire stappenmotoren bezitten 2 wikkelingen zonder middenaftakking. Ze hebben dus 4 aansluitdraden.

 

De wikkelingen worden alternerend in beide stroomzinnen bekrachtigd. De stroomzin moet omgekeerd worden tijdens de werking. Dit vraagt  dus een ingewikkeldere stuurprocedure. Tevens is er bij onoplettendheid mogelijkheid tot kortsluiting!

 

      Toch heb ik gekozen voor dit werkingprincipe, de sturing is dan wel veel ingewikkelder, maar de efficiëntie van de motor (dus het koppel) gaat omhoog, daar nu 1/2 de van de motorspoelen gebruikt wordt tijdens één stap.  Een goed koppel is in dit ontwerp zeker van belang!

     

      Probleem:  Mijn stappenmotoren komen uit recyclage van andere(oudere/defecte) toestellen, ik had dus geen bipolaire stappenmotor ter beschikking, ik heb er wel bipolaire van gemaakt (zie compatibiliteit).

 

3.3.3.  Compatibiliteit

 

Opgemerkt dient te worden dat (buiten de ingewikkeldere sturing), de bipolaire motor qua opbouw bijna identiek is aan de unipolaire. Enkel is de unipolaire voorzien van middenaftakking.

Door kortsluiten / niet gebruiken van deze middenaftakking kan deze unipolaire motor bipolair werken. => Op de niet gebruikte draden staat wel spanning, isoleren is noodzakelijk !

 

DUS: Elke Unipolaire motor kan Bipolair werken mits aanpassing wikkelingen.(Omgekeerd niet)

 

 

4.        Stuurlogica

 

Aangezien er twee soorten stappenmotoren bestaan, zijn er ook twee soorten stuurlogica. De unipolaire stuurlogica en de bipolaire stuurlogica.

 

In mijn toepassing gebruik ik de bipolaire stuurlogica, maar om deze goed te begrijpen eerst even kort de unipolaire stuurlogica.

 

 

 

4.1.  Unipolaire Stuurlogica

 

Zoals eerder vermeld zijn unipolaire motors eenvoudiger te sturen dan bipolaire.

We nemen als voorbeeld de volgende unipolaire motor:

 

Unipolair: 6draden 2x middenaftakking

6 draads unipolaire motor met 2x middenaftakking

 

Draad 1 & 2 hangen we aan een kant van de voeding

Laat ons de min klem nemen (GND dus).

 

Stel dat de motorspoelen op 12v werken en dat 1a/1b/2a/2b verbonden zijn met de 12volt lijn via 4 schakelaartjes.

 

 

Neem aan dat de vier motorspoelen mooi onder een hoek van 90° verdeeld liggen rond de motorkern. Dan moeten we achtereenvolgens afwisselend de 4 schakelaartjes sluiten (telkens één gesloten de overige drie open.)

 

Waarheidstabel;

Stap

1a

1b

2b

2a

1

Toe

Open

0pen

Open

2

Open

Toe

Open

Open

3

Open

Open

Toe

Open

4

Open

Open

Open

Toe

1

Toe

Open

Open

Open

2

Open

Toe

Open

Open

3

Open

Open

Toe

Open

4

Open

Open

Open

Toe

 

Wordt deze logica gerespecteerd, dan zal de stappenmotor mooi in één richting draaien.

Moest de motor een beetje schokkerig draaien, dan zal waarschijnlijk een van de aansluitdraden verwisseld zijn.

 

Het is duidelijk wanneer alle schakelaars bediend worden alle spoelen bekrachtigd zijn. Nu zal de motor onbeweeglijk vast zitten, dit kan in sommige gevallen nodig zijn.

Door één spoel lang te bekrachtigen zal de motor ook vast komen te staan, maar niet zo vast als met vier spoelen.

 

Als alle schakelaars open zijn, zal de motor-as los staan.

 

 

 

Even ter verduidelijking, de as zal dan volgende standen doorlopen:

 

Stap 1

Stap 2

Stap 3

Stap 4

Stap 5

 

Een andere asverdraaiing kan verkregen worden door de schakelaars anders te bedienen.

Stap naar links opschuiven of stap naar rechts opschuiven, maar altijd via aangrenzende stappen.

 

In stuurtoepassingen is het uiteraard niet mogelijk om de schakelaartjes met de hand te bedienen. Daarvoor zal een elektronische sturing moeten gemaakt worden, meestal op een PCB’tje (Printed Circuit Board). Het PCB zal dan op zijn beurt via een microcontroller gestuurd worden.

 

Vervolgens zitten we dan niet meer met schakelaars, maar met digitale (binaire) logica.

Stel:      1 = Schakelaar Toe

            0 = Schakelaar Open

 

Dan krijgen we volgende waarheidstabel:

Stap

1a

1b

2b

2a

1

1

0

0

0

2

0

1

0

0

3

0

0

1

0

4

0

0

0

1

 

 

Deze volgorde dient dan opgenomen te worden in de microcontroller.

 

 

 

 

 

 

Nu buiten de Normale Stap is het ook nog mogelijk om halve stapjes te nemen. De “half step” is de kleinst mogelijke stap.

 

Stap

1a

1b

2b

2a

1

1

0

0

0

2

1

1

0

0

3

0

1

0

0

4

0

1

1

0

5

0

0

1

0

6

0

0

1

1

7

0

0

0

1

8

1

0

0

1

 

 

 

 

 

 

 

 

 

 

 

Het verdere principe blijft hetzelfde, maar nu zal er voor dezelfde asverdraaing te bekomen het dubbel aantal stappen moeten doorlopen worden.

 

 

 

 

 

 

 

4.2.  Bipolaire Stuurlogica

 

 

In tegenstelling tot unipolaire motoren zijn bipolaire motoren dus moeilijker aan te sturen.

Bipolaire motoren zijn gekend voor hun betere krachtverhouding tot dezelfde motorgrootte.

 

Het probleem is echter dat de stroomzin dient geďnverteerd te worden tijdens zijn werking.

Ze hebben echter hetzelfde werkingsdiagram(waarheidstabel) als de unipolaire stappenmotor.

 

Let wel; Nu kan niet meer gesproken worden van schakelaars die open of toe gaan (binair 0/1), maar we moeten hier werken met polariteiten.

 

 

Bipolair:  4 draden

 

 

Stap

1a

2a

1b

2b

1

+

-

-

-

2

-

+

-

-

3

-

-

+

-

4

-

-

-

+

 

 

 

 

 

 

 

 

 

 

 

 

Praktisch is dit te realiseren met een  zogenaamde “dubbele H-brug”.

 

Omdat ik dit principe (dubbele H-brug) bij mijn 3 motorschakelingen gebruik, wordt het volgende hoofdstuk volledig gewijd aan de “H-brug”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.  De H-brug

 

De H- brug heeft de vorm van een “H” en bezit vier schakelaars. Hiermee is het mogelijk om de stroom in één motorspoel om te keren. Omdat een bipolaire stappenmotor niet één spoel heeft, maar 2, moeten we de H-brug dubbel uit voeren!

 

 

 

5.1.  Werking H-brug

 

Omdat het werkingsprincipe van de H-brug eenvoudiger uit te leggen is aan de hand van één motorspoel (met dus ook één H-brug) zullen we er even vanuit gaan dat een DC motor dient gestuurd te worden. (Gelijkspanningsmotor met één spoel)

 

Als we de motor(M) willen laten draaien moeten we de schakelaars ( S1 & S4 ) gesloten worden. Willen we de motor de andere kant op laten draaien, dan dienen we schakelaars ( S2 & S3 ) te sluiten. Het is duidelijk dat de schakelaars altijd paarsgewijs dienen bekrachtigd te worden.

 

Ene kant op draaien

Andere kant op draaien

 

Zoals te zien in bovenstaande figuren zal de motor de ene keer linksom draaien, de andere keer rechtsom draaien. Wanneer alle schakelaars open staan zal de motor tot stilstand komen.

 

Let op:    Het is dus zeker niet toegestaan schakelaars S1 & S3 samen te sluiten, of schakelaars  S2 & S4 samen te sluiten, indien dit wel gebeurd zal de zekering getest worden ;-)

              

      Waarheidstabel;

        

S1

S2

S3

S4

Functie

Open

Open

Open

Open

Niets

Toe

Open

Open

Toe

Motor draait ene kant op

Open

Toe

Toe

Open

Motor draait andere kant op

Toe

Open

Toe

Open

Zekeringtest

Open

Toe

Open

Toe

Zekeringtest

Toe

Toe

Toe

Toe

Zekeringtest

 

 

 

5.2.  Dubbele H-brug

 

Aangezien er in een bipolaire stappenmotor twee motorspoelen zitten, zullen we de H-brug twee keer moeten uitvoeren. Deze moeten volgens een bepaald patroon aangestuurd worden.

 

 Waarheidstabel:

Functie

S1

S2

S3

S4

S1’

S2’

S3’

S4’

niets

Open

Open

Open

Open

Open

Open

Open

Open

Stap 1

Toe

Open

Open

Toe

Open

Open

Open

Open

Stap 2

Open

Open

Open

Open

Toe

Open

Open

Toe

Stap 3

Open

Toe

Toe

Open

Open

Open

Open

Open

Stap 4

Open

Open

Open

Open

Open

Toe

Toe

Open

 

Tevens hier weer op te letten voor kortsluitingen !

 

Zoals te zien in de waarheidstabel wordt de logica voor één motor al wat complexer, nog niet gesproken dat er met elektronische componenten wordt gewerkt i.p.v. met schakelaars met elektronische componenten gaan werken, die of positieve of negatieve logica zullen hebben, waarover later meer…

 

Daarom brengen fabrikanten driver IC’s op de markt, die de gehele  logica voor zich nemen, het enige wat de programmeur dan moet ingeven is; - de klok          (Step/Clk)

                             - de richting      (DIR)

                              - Aan/Uit         (Enable)

 

Een IC(Integrated Cirquit) maakt het aansturen van een stappenmotor een stuk eenvoudiger.

Zo’n volledige driver IC heb ik voor één motor gebruikt; die van de X-richting.

De overige twee motoren zijn zelf gestuurd.

 

 

Fase 1

Fase 2

Fase 3

Fase 4

 

6.  De gebruikte motorsturingen (voor mijn ontwerp)

 

Voor de graveermachine waren 3 stappenmotoren nodig (XYZ), dus ook drie motorsturingen.

Ze zijn alle drie gestuurd volgens het principe van de “dubbele H-brug”. Om niet drie keer dezelfde schakeling te hebben, heb ik ze op verschillende manieren ontworpen. Elke manier heeft zijn eigen complexiteit, voor- en nadelen. (zie verder)

 

 

 

6.1.  Motorsturing Langsrinchting (X-as)

 

Voor mijn eerste motorsturing heb ik het niet al te moeilijk gemaakt. Ik heb gezocht naar een geschikte driver IC en een geschikte H-brug IC. Deze twee logische bouwstenen vormen samen een stappenmotordriver.

 

Aan deze stappenmotordriver moeten dus 3 variabelen doorgestuurd worden:

·        CLK (Stap pulsen van de motor)

·        DIR  (Draairichting van de motor)

·        EN   (Aan / Uit van de motor )

 

L297           Stappenmotor Controller

L6203                                          Dmos H-Bridge  (2x nodig)

 

 

Het inwendige schema van de L6203 ziet er als volgt uit (dit zal verder toegelicht worden)

 

Deze IC heeft tevens volgende mogelijkheden:

·        unipolair / bipolair

·        normal stepping

·        wave stepping

 

 

6.1.1.  Het schema

 

Het schema is opgebouwd volgens de regels van de driver(L297) en de H-brug(L6203)

Deze staan uitgewerkt in hun datasheets. (zie bijlagen op CD)

 

Schema (opgebouwd in Multisim)

 

 

 

3D design van de Printplaat  (zonder koelvin)

Achterkant van de Printplaat

 

6.1.2.  De print(PCB)

 

 

 

 

 

6.1.3.  Gebruikte componenten

 

In het schema zijn volgende componenten gebruikt:

 

Component

Waarde

Aantal

 

prijs/stuk

totaal

weerstand

  Ω

2

 

€ 0,60

€ 1,20

weertand

100Ω

2

€ 0,60

€ 1,20

weerstand

3K9

1

€ 0,10

€ 0,10

weertand

4K7

2

€ 0,10

€ 0,20

weerstand

22k

1

€ 0,10

€ 0,10

trimpot

2K

1

€ 0,35

€ 0,35

condensator

3,3nF

1

€ 0,15

€ 0,15

condensator

15nF

4

€ 0,15

€ 0,60

condensator

22nF

2

€ 0,15

€ 0,30

condensator

100nF

3

€ 0,15

€ 0,45

condensator

220nF

2

€ 0,25

€ 0,50

condensator

1000µF

2

€ 1,00

€ 1,00

controller IC

L297

1

€ 6,75

€ 6,75

IC voetje

20 pins

1

€ 0,50

€ 0,50

H-bridge

L6203

2

€ 10,75

€ 21,50

header

3pins

2

€ 2,50

€ 3,00

header

6pins

1

€ 2,50

€ 2,50

kroonsteen

2pins

2

€ 0,65

€ 1,30

kroonsteen

3pins

1

€ 0,75

€ 0,75

moertjes

M3

2

€ 0,05

€ 0,10

boutjes

M3

2

€ 0,05

€ 0,10

isolatieringetjes

M3

2

€ 0,15

€ 0,30

isolatieblaadjes

 

2

 

€ 2,50

printplaatje

EZ

 

 

 

Koelvin

 

1

€ 15,00

€ 15,00

 

 

Sub Totaal =  € 60,45 

 

Printplaatmateriaal wordt op einde gerekend

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.2.  Motorsturing Dwarsrichting (Y-as)

 

Deze sturing is opgebouwd in twee stukken:     H-Brug PCBx   en   Logica PCBx

 

 

6.2.1.  H-brug PCBy

 

Deze sturing (met dubbele H-brug) is ontworpen zoals te zien in onderstaand schema.

Het schema is opgebouwd met discrete componenten. Dit wil zeggen dat niet alles in een behuizing zit, maar elk onderdeeltje één component is. In dit geval mosfet’s.

 

6.2.1.1.      Het schema

 

Schema (opgebouwd in Multisim)

 

6.2.1.2.      De print

3D design van de Printplaat

Achterkant van de Printplaat

 

 

6.2.1.3.      Uitleg Schema

 

Om het schema (de H-brug met mosfets) te kunnen verstaan, beschrijf ik eerst even kort de basis kenmerken van mosfets zonder hierover in detail te gaan. Daarna zal het schema duidelijk worden.

 

De mosfet is een spanningsgestuurde component (in tegenstelling tot de transistor). Door een bepaalde spanning op zijn gate(stuurpoort) aan te leggen, zal er een kortsluiting gevormd worden tussen de Drain en de Source. Er bestaan twee soorten mosfets, namelijk N-channel mosfets en P-chanel mosfets. Beiden zijn in het schema gebruikt.

 

 

6.2.1.3.1.      N-channel MOS

De N-channel mosfet in de figuur hiernaast (IRF540) bezit positieve logica.

 

Dwz.:         Als er een spanning op zijn gate wordt aangelegd, zal er een    kortsluiting ontstaan tussen D en S.

      Als er geen spanning wordt aangelegd op de gate, zal er geen kortsluiting zijn.

 

 

6.2.1.3.2.      P-channel MOS

 

De P-channel mosfet in de figuur hiernaast (IRF9540N) is net het omgekeerde van de N-channel.   Maw. negatieve logica.

 

Dwz.:         Als er een spanning op zijn gate wordt aangelegd, zal er geen

kortsluiting ontstaan tussen D en S.

Als er geen spanning wordt aangelegd op de gate zal er wel een

kortsluiting ontstaan tussen D en S.

 

 

6.2.1.3.3.      Logica met mosfets

 

Als we nu terug onze dubbele H-brug erbij halen, en de schakelaars vervangen door mosfets.

Dan zal de schakellogica veranderd worden door de P-channel mosfet, hiermee dienen we rekening te houden bij het aansturen of we zullen talloze zekeringetjes gaan testen.

 

 

6.2.1.3.4.      Probleem mosfetsturing

 

Met al het voorgaande in gedachte te hebben begon ik vol enthousiasme aan mijn eerste zelf gemaakte H-brug schakeling. Eens de schakeling klaar stond op het breadboard kon ik deze gaan testen. De eerste test was met één enkele H-brug en DC-motortje op 12volt. Als dit motortje door gepaste gatesturing linksom en rechtsom kon draaien, dan zou de eerste H-brug klaar zijn.

Ik kwam echter tot vaststelling dat ik mijn mosfets(gates) niet zomaar kon aansturen vanuit de microcontroller (0 en 5volt). Het was nodig de gates van de mosfets aan te sturen met 12 volt.

Ik moest mijn logische signalen van de microcontroller dus gaan aanpassen (van 5v naar12v) dit door middel van een transistorschakeling voor elke mosfet zodat deze op 12v kon gestuurd worden.

Natuurlijk door de logica door de transistorschakelingetjes weer beďnvloed. (zie verder)

 

 

 

 

6.2.1.3.5.      NPN Transistor als schakelaar

 

Transistorschakeling die de gate van de Mosfets aanstuurt

 

Deze transistorschakeling zal 8 keer uitgevoerd moeten worden, 1 keer per mosfet.

 

Opgelet: Door deze transistor te gebruiken gaat de

   logische aansturing veranderen.

   Dit is negatieve / inverterende logica !

 

Dus als de microcontroller 5volt uitstuurt, dan zal er op de gate van de mosfet 0v komen te staan. Wanneer de µC 0v uitstuurt, dan zal op de gate 12v komen te staan.

µC

binair

Gate

Mosfet

0

12v

1

0v

 

Hiermee moet dus nogmaals rekening mee gehouden worden in de logica. Indien dit niet gerespecteerd wordt, bestaat er de kans op kortsluiting. (H-brug)

 

 

 

 

 

 

 

6.2.2.  Logica PCBy

 

Het is ondertussen duidelijk dat er met al deze factoren rekening moet gehouden worden. Om de logica van deze schakeling juist te laten verlopen heb ik bovenop de printplaat een bijkomend printje voorzien met microcontroller (PIC16F84A) die de logica voor zich neemt.

Dit zal nu eenvoudig aangestuurd kunnen worden met Clk-, Dir-, En-signaal

 

 

 

6.2.2.1.      Schema van het µC bordje

 

Schema (opgebouwd in Multisim)

3D model van het opzetprintje

 

 

 

 

 

6.2.2.2.      Programma voor de µC(PIC16F84A) voor het logica bordje

 

Programma geschreven in C  met    MPLAB   &   BKND Compiler

 

//#include "16f84a.h"

// ***********************************************************************

//configword: internal clock 4Mc, no WDT, BOD enabled...

#pragma config &= 0x0000

#pragma config |= 0x3FF2

// ***********************************************************************

 

long Teller;

long Teller2;

 

void Disable() {

            Teller++;

            if (Teller >= 30000)

              {

              Teller2++;

              if (Teller2 >= 30000)

               {

               Teller = 0;

               Teller2 = 0;

               PORTB.0=0; PORTB.1=0; PORTB.2=0; PORTB.3=0;

               }

              }

}

 

 

void main(void) {

 

OPTION_REG.7=1; //disable pullups on PORTB

TRISA=0B11111111; //all inputs pu

TRISB=0B11110000; //only PORTB.0 & PORTB.1 & PORTB.2 & PORTB.3 is output

 

int stand=1;

PORTB.0=0; PORTB.1=0; PORTB.2=0; PORTB.3=0;

 

while(1) {

 

            // opgelet hier dienen de linker en de rechter kant samen te werken

            // PORTA.0 =>> CLK

            // PORTA.1 =>> DIR

            // PORTA.2 =>> ENable

                       

            if (PORTA.2==1)  // ENable

                        {

                        while(PORTA.0==1); //zolang aanhouden tot flank terug laag wordt

                        if (PORTA.1==0) //DIR

                                   {

                                    stand--;

                                   if (stand == 0) stand = 4;

                                   }

                        else

                                   {

                                   stand++;

                                   if (stand == 5) stand = 1;

                                   }

                        if (stand == 1) { PORTB.0=0; PORTB.1=1; PORTB.2=0; PORTB.3=0; }

                        if (stand == 2) { PORTB.0=0; PORTB.1=0; PORTB.2=0; PORTB.3=1; }

                        if (stand == 3) { PORTB.0=1; PORTB.1=0; PORTB.2=0; PORTB.3=0; }

                        if (stand == 4) { PORTB.0=0; PORTB.1=0; PORTB.2=1; PORTB.3=0; }

                        while(PORTA.0==0) //zolang aanhouden tot flank terug hoog wordt

                                   {

                                   Disable(); //Als de CLK flank niet meer hoog moest worden =>> en het duurt 9999

                                   } //Als ondertussen Enable uitvalt hier blijven staan

 

                        }

               Teller = 0;

               Teller2 = 0;

            }

}

 

 

 

6.2.3.  Gebruikte componenten

 

In het schema zijn volgende componenten gebruikt:

 

Voor  H-brug PCB

 

Component

Waarde

Aantal

 

prijs/stuk

totaal

transistor

BC547

8

 

€ 0,15

€ 1,20

weerstand

1kΩ

8

€ 0,10

€ 0,80

weerstand

5k6 Ω

8

€ 0,10

€ 0,80

diode

1N5406

8

€ 0,25

€ 2,00

P-channel mos

IRF 9540N

4

€ 2,00

€ 8,00

N-channel mos

IRF 540

4

€ 1,80

€ 7,20

header

9 pins

1

€ 2,50

€ 2,50

printkroonsteen

2 pins

1

€ 0,65

€ 0,65

printplaatje

EZ

1

 

 

 

Voor logica PCB

           

Component

Waarde

Aantal

 

prijs/stuk

totaal

weerstand

10kΩ

1

 

€ 0,10

€ 0,10

condensator

22pF

2

€ 0,15

€ 0,30

condensator

100nF

1

€ 0,15

€ 0,15

diode

1N4007

1

€ 0,12

€ 0,12

kristal

4MHz

1

€ 1,00

€ 1,00

IC Voetje

DIP18

1

€ 0,50

€ 0,50

µC

PIC16F841

1

€ 5,95

€ 5,95

header

9 pins

3

 

€ 2,50

printkroonsteen

2 pins

1

€ 0,65

€ 0,65

printplaat

DZ

 

 

 

 

 

 

Sub Totaal =  € 34,42    

 

Printplaatmateriaal wordt op einde gerekend

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.3.  Motorsturing Hoogterichting (Z-as)

 

De 3de en laatste motorsturing is opgebouwd met transistoren (ook in H-brug transformatie).

Hiervoor opteerde ik eerst om de logica rechtstreeks op te nemen in de hoofd-µC (DSC89c450) en van hieruit ineens naar de transistorbasissen te gaan. Zodat hiervoor geen aparte µC met schakellogica nodig is. Dus zonder dat deze Step / Dir / En signalen krijgt.

 

Maar vanaf deze ontwerpfase naar de toekomst gezien, brengt dat enkele problemen met zich mee, daarom de volgende redenering:

   “  Er zouden immers 8signaaldraden naar de µC moeten lopen (één per transistor) dit betekend dat de hoofd-µC hieraan 8pinnen zal moeten inleveren. Wetende dat onze hoofd-µC 32aansluitpinnen heeft. En we er binnenkort nog wel wat gaan nodig hebben…(lichtsluizen, de 3motoren, de multiplexer, handbediende  stuursignalen, eventueel LCD...)

Die 8aansluitpinnen zijn inderdaad te reduceren tot 4aansluitpinnen door de samenwerkende paartjes samen te nemen. Maar; er komen ook nog eens  drie stuursignalen per motor vanuit de PC  3x( Step / Dir / En )

Om de motor te laten draaien met de software moet er toch een Step/Dir/En ingang voorzien zijn. Dus er zal altijd een logica(µC) nodig zijn om deze om te zetten naar gepaste stuursignalen voor de transistoren.

Dan is er ook nog  de optie om deze banen van de PC naar de hoofd-µC te leggen, en dan vandaaruit met minstens 4aansluitdraden terug te vertrekken.  (3+4=7aansluitpinnen).

Kortom  een betere oplossing is  een aparte µC gebruiken om I/0 van  de Hoofd-µC te besparen.  “

 

In dat geval komt er dus terug een PCB’tje met logica op het H-brug PCB.

 

Dus de sturing van de Z-AS is dus weer in twee stukken;   H-Brug PCBz   en   Logica PCBz

 

 

6.3.1.  H-brug PCBz

 

De Sturing (dubbele H-brug) is ontworpen zoals te zien in onderstaand schema.

Deze is opgebouwd met discrete componenten, in dit geval met transistoren.

 

6.3.1.1.      Het Schema

 

Schema (opgebouwd in Multisim)

 

 

6.3.1.2.      De print

 

3D design van de Printplaat   (zonder koelvin)

Achterkant van de Printplaat

 

 

 

 

 

6.3.1.3.      Uitleg Schema

 

Het schema van de H-Brug voor de Z-AS is eigenlijk niet volledig, om dit te vervolledigen is het volgende nodig:

 

1)      TIP127 & TIP110 vervangen door TIP42 & TIP41

Daar de transistoren die ik had liggen (TIP127 & TIP110) niet in het printontwerp programma (Multisim 8.0) aanwezig waren maar wel de pincompatiebele TIP42 & TIP41 heb ik deze genomen, zonder de componenten opnieuw te tekenen. Tijdens het monteren moet daar wel rekening mee worden gehouden!

 

2)      Stuurtransistoren bijzetten.

Dit is een vergetelheid. Na het ontwerp op breadboard, ben ik de stuurtransistoren vergeten op te nemen in de printplaatlayout. De stuurtransistoren zijn noodzakelijk, ze sturen de  basisen aan van de schakeltransistoren. (deze ontbreken dus in het schema).

Zonder de schakeltransistoren aan te sturen met de stuurtransistoren werkt het PCB’tje niet! (5v µC)

Omdat ik het bordje al geëtst, en de componenten gemonteerd had, heb ik geopteerd om hiervoor geen nieuwe print te maken. Ik heb dus de 8 stuurtransistoren en bijbehorende weerstanden op het bordje bijgesoldeerd.

 

Dit moet in het schema opgenomen worden in de plaats van elke 1Kweerstand !

Voorversterking TIP 127

Voorversterking TIP 110

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.3.2.        Logica PCBz

 

Om de schakellogica ook hier juist te laten verlopen, is het H-brug PCB weer voorzien van een µC met schakellogica. Dit bordje staat bovenop het H-brug PCB.

Dit is weer met een PIC16F84A die de logica voor zich neemt.

De PIC is dan op zijn beurt weer aan te sturen met  ( Clk / Dir  / En ).

 

6.3.2.1.      Logica van deze print

 

Om niet twee keer hetzelfde Logica PCB’tje te hebben, heb ik voor de Z-driver gekozen om elke transistor apart aan te sturen. (Geen samenwerkende koppeltjes.)

Het gevaar bij het aansturen van elke transistor afzonderlijk is dat er kortsluiting kan ontstaan tijdens het schrijven van verkeerde software.

Tijdens het schrijven moet er rekening gehouden worden met de logica van de transistoren, omdat de schakelaars kunnen geprogrammeerd worden in een kortsluiting!

 

6.3.2.2.      Schema van het µC bordje

 

Schema (opgebouwd in Multisim)

 

6.3.2.3.      Print van het µC bordje

 

3D design van de Printplaat

Achterkant van de Print

 

 

 

6.3.2.4.            Programma voor de µC(PIC16F84A)

 

Programma geschreven in C  met    MPLAB   &   BKND Compiler

 

//#include "16f84a.h"

// **************************************************************************

//configword: internal clock 4Mc, no WDT, BOD enabled...

#pragma config &= 0x0000

#pragma config |= 0x3FF2

// **************************************************************************

 

long Teller;

long Teller2; // werkt niet met int??? (toch niet in µC)

 

void Disable() {

            Teller++;

            if (Teller >= 30000)

              {

              Teller2++;

              if (Teller2 >= 5000)

               {

               Teller = 0;

               Teller2 = 0;

               PORTB.7=1; PORTB.6=1; PORTB.5=0; PORTB.4=0; PORTB.3=1; PORTB.2=1; PORTB.1=0; PORTB.0=0; //Alles af

               }

              }

}

 

 

void main(void){

 

OPTION_REG.7=1; //disable pullups on PORTB inputs

TRISA=0B11111111; //all inputs pu

TRISB=0B00000000; //PORTB.7  tot  PORTB.0   is output

 

int stand=1;

PORTB.7=1; PORTB.6=1; PORTB.5=0; PORTB.4=0; PORTB.3=1; PORTB.2=1; PORTB.1=0; PORTB.0=0;  //Alles af

 

while(1){

            // opgelet hier dienen de linker en de rechter kant samen te werken

            // PORTA.0 =>> CLK

            // PORTA.1 =>> DIR

            // PORTA.2 =>> ENable

           

            if (PORTA.2==1)  // ENable

                        {

                        while(PORTA.0==1); //zolang aanhouden tot flank terug laag wordt

                        if (PORTA.1==0) //DIR

                                   {

                                   stand--;

                                   if (stand == 0) stand = 4;

                                   }

                        else

                                   {

                                   stand++;

                                   if (stand == 5) stand = 1;

                                   }

                     if (stand == 1) { PORTB.7=1; PORTB.6=1; PORTB.5=0; PORTB.4=0; PORTB.3=0; PORTB.2=1; PORTB.1=0;       

                                               PORTB.0=1; }

                     if (stand == 2) { PORTB.7=0; PORTB.6=1; PORTB.5=0; PORTB.4=1; PORTB.3=1; PORTB.2=1; PORTB.1=0;

                                               PORTB.0=0; }

                     if (stand == 3) { PORTB.7=1; PORTB.6=1; PORTB.5=0; PORTB.4=0; PORTB.3=1; PORTB.2=0; PORTB.1=1;

                                               PORTB.0=0; }

                     if (stand == 4) { PORTB.7=1; PORTB.6=0; PORTB.5=1; PORTB.4=0; PORTB.3=1; PORTB.2=1; PORTB.1=0;

                                               PORTB.0=0; }

                        while(PORTA.0==0) //zolang aanhouden tot flank terug hoog wordt

                                   {

                                   Disable(); //Als de CLK flank niet meer hoog moest worden =>> en het duurt 9999

                                   } //Als ondertussen Enable uitvalt hier blijven staan

                                                }

               Teller = 0;

               Teller2 = 0;

            }

}

 

 

 

 

6.3.3.  Gebruikte Componenten

 

In het schema zijn volgende componenten gebruikt voor de Hoogteinrichting:

 

Voor  H-brug PCB

 

Component

Waarde

Aantal

 

prijs/stuk

totaal

weerstand

1k

8

 

€ 0,10

€ 0,80

condensator

470µF

1

€ 0,12

€ 0,12

diode

1N5406

8

€ 0,25

€ 2,00

transistor

TIP110

4

€ 0,50

€ 4,00

transistor

TIP127

4

€ 0,50

€ 4,00

header

9 pins

1

€ 2,50

€ 2,50

printkroonstekker

2pins

3

€ 0,65

€ 1,95

boutjes

M3

8

€ 0,05

€ 0,40

moertjes

M3

8

€ 0,05

€ 0,40

isolatiemica

 

8

 

€ 2,50

koelvin

 

1

€ 15,00

€ 15,00

isolatieringetjes

M3

8

€ 0,15

€ 1,50

printplaat

EZ

 

 

 

 

 

Voor logica PCB

           

Component

Waarde

Aantal

 

prijs/stuk

totaal

weerstand

10k

1

 

€ 0,10

€ 0,10

condensator

100nF

1

€ 0,15

€ 0,15

condensator

22pF

2

€ 0,15

€ 0,30

diode

1N4007

1

€ 0,12

€ 0,12

IC voetje

16pins

1

€ 0,45

€ 0,45

kristal

4MHz

1

€ 1,00

€ 1,00

µC

PIC16F84a

1

€ 5,95

€ 5,95

header

 

1

 

€ 2,50

printkroonsteen

2 pins

1

€ 0,65

€ 0,65

printplaat

DZ

 

 

 

 

 

 

Sub Totaal =  € 49,59    

 

Printplaatmateriaal wordt op einde gerekend

 

 

 

 

 

 

 

 

 

 

 

7.        LCD Scherm

 

 

7.1.  Wat is een LCD

 

Zonder onnodig uitgebreid in detail te gaan, staat LCD voor Liquid Cristal Display.

Het schermpje dat ik gebruik (uit een oude HP-Computer) bevat twee lijnen van 16 karakters waar tekst in ASCII(American Standard Code for Information Interchange) karakters op kan weergegeven worden. (De ASCII tabel is terug te vinden in de bijlage). Ook zit er een backlight verlichting en een contrastregeling op.

(voor meer diepgang in LCD zie “LCD-beamer” Project Engels bij Mvr. Lut Weltens)

 

 

7.2.  Aansturing

Om iets op zo’n LCD schermpje te krijgen, zal het scherm pixel voor pixel moeten aangestuurd worden. Hiervoor is het  ook nodig om de exacte locatie van elke pixel te kennen. Zo kunnen er dan, door in de buurt liggen de pixels samen aan te zetten letters gemaakt worden. (zie figuur.)

 

Omdat dit een omslachtig werkje is, hebben fabrikanten een   “LCD Driver” chip op dit scherm geďmplementeerd.

 

 

 

7.3.  LCD driver

 

Met deze chip gaat het aansturen van zo’n LCD scherm al aanzienlijk eenvoudiger.

Het ASCII teken wordt nu naar de driver gestuurd. De comunicatie met de driver verloopt via een DataBus en een ControleBus. De driver stuurt de pixels aan op voorgedefinieerde wijze. (ASCII-patroon)  

Let wel:   Nu is er enkel nog maar de mogelijkheid om ASCII tekens weer te geven, grafisch zelf figuren gaan tekenen kan niet meer met dit soort LCD Driver!

  

 

7.3.1.  Controlebus

 

De controlesignalen zijn nodig zodat de ‘driver chip’ kan weten wat er juist moet gebeuren met de gegevens die worden aangeboden via zijn databus. Hiervoor zijn 3 controlelijnen voorzien:

1)     RS      Register Select Signal

2)     R/W    Read / Write Signal

3)     E       Enable Signal

 

In onderstaande tabel is te zien wat waarvoor dient;

RS

R/W

Operation

L

L

Instruction Write Operation (MPU writes Instruction code into IR)

L

H

Read Busty flag(DB7) and address counter (DB0 to DB6)

H

L

Data Write operation (MPU writes data into DR)

H

H

Data Read operation (MPU reads data from DR)

 

Zoals te zien in de tabel is er ook de mogelijkheid om data van het scherm uit te lezen. Voor mijn toepassing is dit niet nodig. Enkel Schrijven naar het LCD is hier nodig (R/W = L)

 

Verder is er ook nog het Enable signaal. Dit zal telkens de aangeboden info inklokken.

 

 

7.3.2.  Databus

 

De databus is een parallelle bus. (DB7 tot DB0). Deze bus wordt zowel voor de instructiesignalen als voor de datasignalen gebruikt. (Maar niet voor controlesignalen.)

 

7.3.2.1.      Werkmodi

 

De databus kan in twee werkmodi werken: byte niveau of nibble niveau.

 

7.3.2.1.1.      Byte Niveau

 

Dit is de eenvoudigste manier. Bij deze methode stuur je gewoon het nummer van het ASCII teken decimaal naar de poort door.

Het werken op byte niveau betekent dat er al zeker 8 I/O(Input/Output) poorten in gebruik zullen zijn + controlesignalen. Het is duidelijk dat deze niet meer voorhanden zijn op de µC omdat ze al in gebruik zijn voor de stappenmotoren en er later nog andere dingen moeten aangesloten worden.

 

7.3.2.1.2.      Nibble niveau

 

Deze manier is iets ingewikkelder. Hier moet het ASCII karakter in twee gesplitst worden, zodat we twee keer 4 bits hebben. (Dus samen weer 8 bits)

 

 

 

 

7.3.2.2.      Instructiesignalen

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


7.3.2.3.      Datasignalen

 

De datasignalen zijn de binaire ASCII tekens.

 

 

 

7.4.  LCD contrast

 

Om de leesbaarheid van het scherm vanuit elke invalshoek mogelijk te maken, kan het contrast ingesteld worden met een lineaire potentiometer

(Regelbare weerstand).

Door aan het staafje van de potmeter te draaien, zal de spanning aan de contrastpin variëren tussen 0 en 5v DC.

 

 

 

 

7.5.  LCD backlight

 

Het scherm bevat ook een achtergrondverlichting, hierdoor is het mogelijk om het scherm in het donker, of bij weinig licht af te lezen. De aansluitingen van de achtergrondverlichting zijn te vergelijken met die van een diode of LED. (Anode / Kathode)

De backlightverlichting heb ik niet voorzien om uit te zetten, en staat permanent aan.

 

 

 

 

 

7.6.  LCD debuggen

 

Eens de routine(software) voor het LCD scherm is geschreven (zie volgende bladzijde) kan het schermpje dankbaar gebruikt worden voor de verdere realisatie van dit eindwerk!

 

Het schermpje gebruiken om te debuggen*.

 

Vroeg of laat is het tijdens het schrijven van een programma noodzakelijk om te controleren wat het programma wel/niet doet. Een programma van de eerste keer zonder fouten neerschrijven is echter een utopie…

(Vb: Wordt een if clausule al of niet uitgevoerd)

 

Dit kan dan door het weergeven van tussentijdse meldingen of resultaten op het LCD scherm.

Zo kan dan gedebugd worden.

 

*Zoeken van (fouten in) een lopend programma. (De Bug(gen) eruit halen)

 

 

7.7.  Stuur programma voor LCD scherm

 

Dit is een deel code uit het hoofdprogramma “Graveerxx.c” dat nodig is voor de sturing van het LCD scherm.

Programma geschreven in C voor µC  met    Notepad   &   SDCC Compiler

 

void Delay(long snelheid) {

  long a;

  for (a=0;a<snelheid;a++);   

}

 

void LCD_Enable() { //inklokken data

  P1_3=1; Delay(2); P1_3=0; Delay(2);

}

 

void Line(int LineNr) {

 Delay(5);

  P1_2=0;

  if (LineNr==1) {

    P1_7=1; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

    P1_7=0; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

    Delay(300);

  }

  if (LineNr==2) {

    P1_7=1; P1_6=1; P1_5=0; P1_4=0; LCD_Enable();

    P1_7=0; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

    Delay(300);

  }

  P1_2=1; //terug in data mode

  Delay(100); Delay(30000); Delay(30000);

}

 

void Entry_Mode() {

  P1_2=0;

  P1_7=0; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

  P1_7=0; P1_6=1; P1_5=1; P1_4=0; LCD_Enable();

 

}

 

void OnOff_Control() {

  Delay(1000);

  P1_2=0;

  P1_7=0; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

  P1_7=1; P1_6=1; P1_5=1; P1_4=0; LCD_Enable();

}

 

void Function_Set() {

  P1_2=0;

  P1_7=0; P1_6=0; P1_5=1; P1_4=0; LCD_Enable();

  Delay(10000);

  P1_7=0; P1_6=0; P1_5=1; P1_4=0; LCD_Enable();

  P1_7=1; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

}

 

void Clear_Display() {

  Delay(100); //achteraf effe kijken of het nog wel gedaan wordt !

  P1_2=0;

  P1_7=0; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

  P1_7=0; P1_6=0; P1_5=0; P1_4=1; LCD_Enable();

}

 

void Lcd_Print_Char(char ASCII) { //ASCII = binair

  int twee=2;  // om integerdeling te verkrijgen

  LCDbit0 = ASCII % twee;

  LCDbit1 = (ASCII / twee) % twee;

  LCDbit2 = ((ASCII / twee) / twee) % twee;

  LCDbit3 = (((ASCII / twee) / twee) / twee) % twee;

  LCDbit4 = ((((ASCII / twee) / twee) / twee) / twee) % twee;

  LCDbit5 = (((((ASCII / twee) / twee) / twee) / twee) / twee) % twee;

  LCDbit6 = ((((((ASCII / twee) / twee) / twee) / twee) / twee) / twee) % twee;

  LCDbit7 = (((((((ASCII / twee) / twee) / twee) / twee) / twee) / twee) / twee) % twee;

 

 P1_2=1; Delay(50);

 P1_7=LCDbit7; P1_6=LCDbit6; P1_5=LCDbit5; P1_4=LCDbit4; LCD_Enable();

 P1_7=LCDbit3; P1_6=LCDbit2; P1_5=LCDbit1; P1_4=LCDbit0; LCD_Enable();

}

Met   Lcd_Print_Char(’C’) kan dan een karakter naar het scherm geschreven worden, let wel de headerfiles.h , Declarering en de main() zijn hier niet weergegeven.

 

8.        De multiplexer

 

 

 

8.1.  Wat is een multiplexer?

Een multiplexer, of kortweg MUX, is te vergelijken met een ronddraaiende schakelaar die op een rotor zit.

Op die manier kan de schakelaar zijn gewenste stand kiezen. Op de figuur is een MUX afgebeeld die zijn output aan één van de 4 inputs kan doorgeven.

Uiteraard is zo’n MUX uitbreidbaar door meerdere contactpunten op de schijf te monteren.

 

 

 

8.2.  Toepassingsgebied.

 

Multiplexers worden gebruikt om op het aantal aansluitpinnen en draadverbindingen naar de verschillende componenten te beperken. Meestal leggen we één BUS aan waar alle componenten parallel zijn op aangesloten. Elk component kan gegevens op de BUS zetten of van de bus lezen. Dit gebeurt met een multiplexer. Deze zal de gepaste gegevens op de BUS zetten. Met de selectie-ingang (keuzestand van de schakelaar) kan men kiezen tussen de verschillende gegevens. Daarom wordt de selectie-ingang ook wel de adresingang van de schakelaar genoemd.

In de elektronica bestaat deze schakelaar uiteraard niet uit een ronddraaiende schijf, maar uit logische poorten (AND / OR / NOT)

 

 

 

 

8.3.  Waarom een MUX?

 

De µC die ik gebruik (DS89c450) bezit een I/O van 4x8byte, wat net voldoende is mits doordacht om te gaan met de I/O. Daarom heb ik gekozen om de sturing van de stappenmotoren over een gemultiplexte BUS te laten verlopen. Hierdoor bespaar ik op I/O die later nog nodig is.

 

Met de MUX zal een keuze kunnen gemaakt worden tussen de handmatige sturing (jog control vooraan op de machine) en de sturing vanuit de PC.

 

 

 

 

8.4.  Selectingang

 

Voor de selectingang van de MUX heb ik gekozen voor een mechanische schakelaar.

Eerst liep de selectie tussen PC en touchpannel automatisch.Vanaf het moment dat je een toets van de manuele sturing indrukte, nam de controle over.

Achteraf bleek dit niet zo efficiënt, omdat er op een toets kon geduwd worden tijdens het frezen. Hierdoor voert de machine de gekozen beweging uit. Dit kan nefast zijn voor het freesje!

Daarom een tuimelschakelaar, zodat er veilig kan gekozen worden tussen PC en manuele bediening.

 

 

 

8.5.  Schema van de MUX

 

Schema MUX met Logische  AND / OF / NOT  poorten

(Hierboven wordt de AND poort gebruikt als schakelaar)

 

 

 

8.6.  MUX SN74LS157

 

8.6.1.  Bestaande MUX

 

Alhoewel het relatief eenvoudig is om voorgaand schema met logische poorten op te bouwen  heb ik toch gekozen om een bestaande MUX te zoeken die voor mijn toepassing geschikt was. Hierdoor valt de printafmeting kleiner uit en zijn er minder IC’s nodig.

Tevens is er ook minder poortvertraging (maar hier niet echt van toepassing).

SN74LS157

Deze bezit zoals op de tekening te zien 4 x een (2Line to 1Line MUX)

 

We hebben 9 (2Line naar 1Line MUX) nodig, we hebben dus zo’n drie IC’s nodig.

 

Van de 3de IC schieten er dan nog drie ongebruikte lijnen over. Dit is overschot. Ze zijn niet gebruikt maar wel naar buiten gebracht.

 

 

8.6.2.  Inwendig Schema

 

Inwendig Schema SN74LS157  (3x nodig)

 

 

8.6.3.  Het schema

 

Schema (opgebouwd in Multisim)

 

 

8.6.4.  De print

 

3d design van de Printplaat

 

 

 

 

8.6.5.  Gebruikte componenten

 

Component

Waarde

Aantal

 

prijs/stuk

totaal

multiplexer

SN74LS157

3

 

€ 0,62

€ 1,86

IC voetje

16pins

3

€ 0,45

€ 1,35

header

2 pins

1

 

€ 2,50

header

3 pins

12

 

€ 2,50

printkroonstekker

2 pins

1

 

€ 0,65

printplaat

EZ

1

 

 

 

 

 

 

Sub Totaal =  € 6,36

 

Printplaatmateriaal wordt op einde gerekend

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9.        Bedieningspaneel

 

9.1.  Manuele bedieningsprint

 

Dit printje bevat 8 tact-schakelaars die via pull-up weerstanden verbonden zijn met de µC (DS89c540). Hiermee kan handmatig, zonder tussenkomst van de software, naar een gewenste positie gegaan worden. Eventueel kan dan vanuit die positie een fictief nulpunt ingesteld worden.

 

9.1.1.  Het schema

 

Schema (opgebouwd in Multisim)

 

 

 

9.1.2.  De print (PCB)

3D design van de Printplaat

Achterkant van de Printplaat

 

 

 

 

9.1.3.  Gebruikte componenten

 

Component

Waarde

Aantal

 

print/stuk

totaal

weerstand

10k

7

 

€ 0,10

€, 0,70

tact schakelaar

2 pins

7

€ 0,25

€ 1,75

printplaat

EZ

1

 

 

 

Sub totaal =  € 2,45      Printplaatmateriaal wordt op einde gerekend

 

9.2.  One-touch print

 

Met dit printje, kan de boorkop(dremel) met één druktoets aan en uit gezet worden; met de eerste druk aanzetten, met de tweede druk terug uit zetten. Dit wil zeggen dat er moet bijgehouden worden in welke toestand de drukschakelaar zich bevindt (aan of uit). Tevens kan ook de PC de bediening overnemen. De PC sturing heeft voorrang op de manuele bediening omdat de frees niet zou kunnen stilgezet worden tijdens het graveren.

De schakeling is in tweevoud opgebouwd, zodat ook een optionele stofzuiger bediend kan worden. 

 

 

 

 

9.2.1.  Opbouw

 

De schakeling is opgebouwd rond een D-flipflop. Deze fungeert als geheugenelement om de toestand van de schakelaar bij te houden.

De Not-poort zal vermijden dat tijdens het aanzetten van de voedingspanning het relais aantrekt en de boorkop/stofzuiger opspringt.

De of-poort geeft de PC de mogelijkheid om de controle over te nemen.

 

Verder is het printje voorzien van een groene en een blauwe LED; groen voor aan, rood voor uit.   De vermogensturing (230v AC) gebeurt door het relais).

 

 

 

 

9.2.2.  Werking flipflop

 

Een flipflop is ‘het’ basisgeheugen element dat één bit kan onthouden. In het geheugen van een computer zitten er miljoenen. Zo kan men geheugens bekomen tot verscheidene Mbytes.

 

 

 

9.2.2.1.      Mechanische analogie

 

Met een mechanische analogie is hieronder de werking van ‘het’ prilste geheugenelement weegegeven. Als we een balletje in het buisje laten vallen, zal de “flipflop” een logische toestand aannemen, in de elektronica is deze hoge en lage toestand een 0 of 1.

Laten we daarna nog een balletje vallen, dan zal de andere logische toestand worden aangenomen. Dit is de basis van één geheugenelement. (De bit kan dus 0 of 1 zijn)

 

 

 

 

9.2.2.2.      Elektronische werking

 

Op de volgende bladzijde wordt de elektronische werking toegelicht. Dit van eenvoudig geheugenelement, tot de werking van de D-flipflop die ik hiervoor gebruik.

 

 

9.2.2.2.1.Eenvoudigste geheugenelement.

 

Het eenvoudigste geheugen om één bit te onthouden is een of-poort met teruggekoppelde uitgang zoals te zien in de figuur.

 

Indien S ‘0’ is, dan zijn beide ingangen van de of-poort ‘0’, en de uitgang dus ook ‘0’.

 

Indien S ‘1’ wordt, dan zal de uitgang ook ‘1’ worden, met als gevolg dat ingang twee ook ‘1’ wordt. Hierdoor blijft de uitgang continu ‘1’.

 

Het is duidelijk dat dit element niet meer van logische toestand kan veranderen. Het zal voor eeuwig  ‘1’ blijven, tenzij de voedingspanning wordt uitgezet. Dit is niet de bedoeling…

 

 

9.2.2.2.2.      Beter geheugenelement.

Het probleem kan opgelost worden door de terugkoppeling van de of-poort weg te nemen. Dan zal de ‘1’ aan de ingang ook wegvallen. Dit kan door een en-poort te implementeren, zodat het geheugenelement gereset kan worden.

 

R

S

Q

0

0

0

0

1

 

1

0

Q

1

1

1

 

Tijdsdiagram:

           

Opm.:  De toestand (R=1 en S=0 ) mag nooit gebruikt worden.

Bij deze toestand zal de uitgang 0 worden, maar als we van de toestand (R=1 en S=0 ) naar toestand (R=1 en S=0 ) zouden gaan, dan ontstaat er oscillatie !

 

 

Het tijdsdiagram zou iets logischer worden als de R(Reset) niet continu hoog moet gehouden worden.

Dit kan door het implementeren van een NOT poort.

 

Nu kan:      - met één korte puls geset worden (Set)

- met één korte puls gereset worden (Reset)

R

S

Q

0

0

Q

0

1

1

1

0

0

1

1

 

 

      Tijdsdiagram:

                 

 

Opm.:  De toestand (R=1 en S=1 ) mag nooit gebruikt worden.

Bij deze toestand zal de uitgang 0 worden, maar als we van de toestand (R=1 en S=1 ) naar toestand (R=0 en S=0 ) zouden gaan, dan ontstaat er oscillatie !

 

Om het aantal poorten te besparen, kan men via de wetten van DeMorgan komen tot een vereenvoudiging. (voor details zie bijlagen afgeleide poorten)

 

       is net hetzelfde als:     

 

 

De werking is uiteraard nog steeds dezelfde. (We noemen het een RS-Latch)

 

9.2.2.2.3.      RS-latch

 

 

 

 

9.2.2.2.4.      RS-latch met enable ingang

 

Als we de mogelijkheid willen om de S en R signalen te Enabelen of Disabelen, moeten we voor de RS-latch een en-poort als schakelaar implementeren.

 

 

 

9.2.2.2.5.      D-latch

 

Nu zijn we bijna aan de werking van de eigenlijke D-flipflop

Uiteindelijk is het de bedoeling om data te gaan opslaan. Hiervoor vervangen we de Set en Reset ingang door een Data (D) ingang. Nu kan er data aangeboden worden. (Vanaf hier is ook de verboden toestand verdwenen)

 

 

 

9.2.2.3.      D-flipflop

 

Het verschil tussen een flipflop en een latch is dat de flipflop zijn data enkel inklokt op de stijgende flank van een kloksignaal.

Bij een stijgende klokflank zal de uitgang gelijk worden aan de ingang. Zolang er geen stijgende klokflank optreedt, zal de flipflop de data niet inklokken.

Het enige wat er dus aan de D-latch moet toegevoegd worden is een pulsmaker (flank naar puls omzetter).

 

 

Als we deze twee samenvoegen krijgen we:

 

 

 

9.2.2.4.Dual D-Flipflop CD4013BC

 

In plaats van de bovenstaande D-flipflop schakeling te gaan maken met verschillende logische poorten, is er de kant en klare D-flipflop. In een 14pins IC’tje.

 

                                   

 

 

9.2.3.  Principeschema

Het principeschema van de one-touch-schakeling met de   D-FlipFlop is hieronder weergegeven, dit werkt volgens het hierboven beschreven principe. Zoals te zien is de ‘inverterende uitgang’ hier teruggekoppeld naar de ingang. Op elke klokflank zal er dus aan de dataingang de ’inverterende uitgang’ aangeboden worden, en de uitgang  elke klokpuls veranderen van bittoestand.

 

1 wordt na Clk Puls 0

0 wordt na Clk Puls 1

 

Als we dit nu handmatig willen maken, dan moeten we de pulstrein vervangen door een schakelaar, die een stijgende klokflank genereert bij het indrukken.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Telkens nu op de drukknop gedrukt wordt, krijgen we een stijgende klokflank binnen.

 

Na het bouwen van deze schakeling verkreeg ik geen stabiel uitgangssignaal.

De rede van onstabiliteit is bij de schakelaar te zoeken.

 

Een schakelaar schakelt immers niet ideaal. Dit wil zeggen dat de contactpunten van een schakelaar verschillende keren ‘contact maken en weer niet’ tegen een gigantisch hoge snelheid alvorens een stabiele toestand bereikt word. Dit noemt ‘dender’. (Zie volgende blz.)

 

 

9.2.3.1.      Dender

 

Definitie van  Maxim Dallas-Semiconductors: http://www.maxim-ic.com

Electrical contacts in mechanical pushbutton switches often make and break contact several times when the button is first pushed. A debouncing circuit removes the resulting ripple signal, and provides a clean transition at its output.

 

After connecting a standard switch to a digital counting circuit, you can observe several counts on opening and several counts on closing. This erratic action can wreak havoc on data, because the exact number of counts does not necessarily repeat in the long term. Switch bounce is not consistent from unit to unit,lot to lot, or even over the life of an individual switch. Membrane switches and some other types don't appear to bounce when new, but all mechanical switches bounce sometimes. Nothing can ensure that another switch of the same type will act the same way, or that a particular switch will remain bounce-free as it ages.

 

Bij de meeste toepassingen is dit effect niet zo erg, en verwaarloosbaar. Maar zoals hierboven in het citaat vermeld, is het voor tellers en dergelijke wel van belang.

Bij de stappenmotorschakelingen is hier ook rekening mee gehouden, dit bij het schrijven van de software in de PIC’s. Moest er geen rekening mee gehouden zijn, dan zouden er bij één stappuls, meerdere stapjes gedaan worden. In de PIC is dit probleem softwarematig opgelost met een vertragingstijd van +/- 10msec, zodat er tijd genoeg is om te ontdenderen.

 

In het geval met de flipflop is het probleem hardwarematig opgelost door de weerstanden en de condensators.

 

Tijdens het schrijven van deze scriptie ontdekte ik dat voor dit probleem al kantenklare IC’s op de markt zijn (MAX6816, MAX6817, and MAX6818) Switch Debouncers.

 

9.2.4.  Het schema

Schema (opgebouwd in Multisim)

 

9.2.5.  De Print

3D design van de Printplaat

Achterkant van de Printplaat

 

 

Opm.; De twee tact-schakelaars die boven elkaar staan hebben dezelfde functie. Twee druktoetsen met dezelfde functie op één print is dus absurd. De tweede is in het bedieningspaneel opgenomen. (De andere schakelaar op het printje hoeft zelfs niet)

Opm˛;  In de figuur is de bovenste LED rood, deze moet groen zijn  (andere spanning).

Opmł;  De LED’s staan niet op het PCB’tje maar zijn met verbindingsdraadjes naar het  bedieningspaneel geleid.

 

 

 

 

9.2.6.  Gebruikte Componenten

 

Component

Waarde

Aantal

 

prijs/stuk

totaal

weerstand

1kΩ

4

 

€ 0,10

€ 0,40

weerstand

1MΩ

2

€ 0,10

€ 0,20

weerstand

220Ω

2

€ 0,10

€ 0,20

weerstand

390Ω

2

€ 0,10

€ 0,20

weerstand

100kΩ

2

€ 0,10

€ 0,20

condensator

100nF

5

€ 0,15

€ 0,75

LED

Rood 5mm

2

€ 0,12

€ 0,24

LED

Groen 5mm

2

€ 0,12

€ 0,24

diode

1N4007

2

€ 0,12

€ 0,24

transistor

BC547(c)

2

€ 0,15

€ 0,30

D-flipflop

4013

1

€ 1,00

€ 1,00

NOT poort

7404

1

€ 0,50

€ 0,50

OR poort

7432

1

€ 0,40

€ 0,40

IC Voetje

14 pins

3

€ 0,35

€ 1,05

relais

12v spoel

2

€ 2,90

€ 5,80

tact schakelaar

2 pins

4

€ 0,25

€ 0,50

header

2 pins

1

 

€ 2,50

printkroonsteen

3 pins

3

€ 0;65

€ 1,95

printplaat

EZ

1

 

 

 

Sub totaal =  € 16,67      Printplaatmateriaal wordt op einde gerekend

 

9.3.  Dimmer

 

Met de dimmer kan het toerental van de freeskop(dremel) geregeld worden. Dit kan door aan het staafje van de potentiometer te draaien.

 

 

9.3.1.  Werking

 

9.3.1.1.      Triac (TRIode for Alternating Current)

 

De triac kan met zijn gate in beide richtingen geleidend gemaakt worden. (vandaar AC)

De triac dooft automatisch net voor de nuldoorgangen, meer precies op het ogenblik dat de hoofdstroom beneden de houdstroom IH komt.

We hebben dus één stuurpuls nodig per halve periode van de netvoeding zoals te zien in onderstaande figuur.

 

         (Figuur uit; Handboek Elektronische Vermogencontrole)

 

De pulsen op de gate kunnen op de juiste tijdstippen aangeboden worden door een µC.

Maar ik maak hiervoor gebruik van een diac.

 

9.3.1.2.      Diac (DIode for Alternating Current)

 

Een Diac zal in geleiding komen als zijn doorslagspanning bereikt wordt (gunstig lawine-effect)

Dit doorslageffect is reproduceerbaar (althans als het dissipatievermogen beneden een toegelaten maximum gehouden wordt).

 

Als de weerstand van de potmeter groter wordt, zal de spanning over de condensator kleiner worden en zal deze spanning ook meer gaan naijlen op de bronspanning. Zo zal de condensatorspanning later de doorslagspanning van de diac bereiken. Hoe lager de weerstand van potentiometer wordt ingesteld, des te vroeger de thyristor in geleiding wordt gestuurd.

(Bron; wikipedia)

 

 

9.3.2.  Het Schema

 

 

Schema (opgebouwd in Multisim)

 

 

 

 

9.3.3.  De print

3D design van de Printplaat

Achterkant van de Printplaat

 

 

 

 

 

9.3.4.  Gebruikte componenten

 

Component

Waarde

Aantal

 

prijs/stuk

totaal

weerstand

5k6

1

 

€ 0,10

€ 0,10

potentiometer

500k LIN

1

€ 1,50

€ 1,50

condensator

100nF

1

€ 0,15

€ 0,15

diac

 

1

€ 0, 40

€ 0,40

triac

TIC225

1

€ 2,00

€ 2,00

kroonsteen

2 pins

2

€ 0,65

€ 1,30

printplaat

DZ

1

 

 

 

Sub totaal =  € 5,45      Printplaatmateriaal wordt op einde gerekend

 

 

10.      Eindeloopschakelaars

 

 

10.1.  Wat is een eindeloopschakelaar ?

 

Een eindeloopschakelaar staat, zoals de naam al zegt, net voor het einde van de loop.

Wanneer het toestel het einde van de baan nadert, zal deze tegen de eindeloopschakelaar duwen. Zo weet het toestel dat het moet stoppen, en niet verder mag lopen.

Een goedkopere, snellere, propere manier is een lichtsluis, ook wel Photointerrupter / OptoSwitch genoemd.

 

Zo heb ik er dus 6 nodig (twee per as)

 

 

10.2.  Interne opbouw lichtsluis.

Een lichtsluis werkt echter niet zoals een mechanische schakelaar.

In een lichtsluisje zitten twee elektronische componenten: een diode(LED) en een fototransistor. Tussenin zit een sluisje, waar een voorwerp tussen geschoven kan worden.

De LED geeft permanent licht. Met de fototransistor wordt het licht al of niet ontvangen.

Wanneer er licht op de transistor valt, zal deze in saturatie gaan. Wanneer er geen licht op de transistor valt, zal deze in geleiding gaan.

 

 

 

10.3.  Schakeling

 

Een LED werkt op 1,5 volt. Onze logische voedingspanning die we hebben is 5v, dus moeten we een voorschakelweerstand R1 voorzien.

Het is ook nodig om een Pullup weerstand te voorzien, deze heb ik 22K Ω genomen.

De waarde van R1 is;   ik heb 390Ω genomen.

 

 

10.3.1.   Printontwerp

3D design van de Printplaat

Achterkant van de Print

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10.4.  Monteerbare lichtsluis.

 

De lichtsluisjes die ik had liggen (HOA1881-12) waren echter niet voorzien van montagegaten. Omdat het properder en eenvoudiger is om met montagegaten te werken, heb ik achteraf andere lichtsluisjes besteld.  => GP1A51HR

 

 

 

10.4.1.   Interne opbouw GP1A51HR

Zoals te zien in de tekening bevat deze lichtsluis al een interne pullupweerstand. Enkel de voorschakelweerstand voor de LED is dus nog nodig. Er zou dan eigenlijk nog maar

6x 1 weerstand op het printje nodig zijn. Een printje maken voor 6 weerstanden is vrij idioot. Daarom heb ik besloten om op de lichtsluis zelf de massa (pin 5 & pin 2) te verbinden en de voorschakelweerstanden op de lichtsluizen te solderen en het printje te laten wegvallen.

 

 

 

 

 

 

 

10.5.  Gebruikte componenten

 

Component

Waarde

Aantal

 

prijs/stuk

totaal

weerstand

5k6

1

 

€ 0,10

€ 0,10

lichtsluis

GP1AH1HR

6

€ 1,20 (school)

€ 7,20

 

Sub totaal =  € 7,30      Printplaatmateriaal wordt op einde gerekend

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11.      De microcontroller

 

 

 

11.1.   Wat

 

Een microcontroller afgekort µC is te vergelijken met een IC, maar dan een zelf programmeerbare.

Intern bezit een µC hardware zoals in een processor van een PC:  registers, ALU(Aritmic and Logical Unit), waar logische berekeningen worden uitgevoerd (op max. 2 binaire getallen tegelijkertijd.) Zo kan er opgeteld, afgetrokken, vermenigvildigd, gedeeld en geshift worden, alsook and or, xor, enz… Ook bevat de µC een ROM geheugen (Read Only Memory) waar het geschreven programma wordt in opgeslagen. Tevens is er ook een (klein) RAM (Random Acces Memory) waar variabelen kunnen in opgeslagen worden.

Ze zijn van I/O (Input/Output) poorten voorzien waarmee kan gecommuniceerd worden naar de buitenwereld.

 

Er bestaan ook µC waarin al speciale functies zitten zoals; ingeboude A/D converters (Analoog/Digitaal) , PWM regeling (Pulse Width Modulation), mp3 decoders,…

 

 

 

 

 

11.2.   Voordelen / Nadelen van een µC

 

µC’s zijn overal terug te vinden in bijna alle toestellen waar iets of wat van elektronica inzit:

GSM’s, auto’s, alarmsystemen, koelkasten, mp3 spelers, horloges, hifiketens, tv’s, wasmachines, digitale fototoestellen en camera’s, speelgoed, PC’s, codesloten,…

kortom alles !…

 

Toch zijn er voor- en nadelen, en zelfs redenen om toch maar geen µC te gaan gebruiken.

(zie volgende blz)

 

 

 

 

 

 

11.2.1.   Voordelen

 

Je kan volledig zelf bepalen hoe de poorten aangesproken worden, en dus hoe de aangesloten periferie moet gaan werken. Je kan hem 1000den  keren herprogrammeren. Zelfs zonder de chip uit de schakeling te halen door ISP (In System Programing) te voorzien (dit kan wel gevaren met zich meebrengen, maar niet in mijn geval).

Tevens is een µC zeer klein, en in verhouding tot de mogelijkheden kosten ze geen geld.

De enige beperking is eigenlijk je eigen kunnen.

 

 

 

 

 

 

 

11.2.2.   Nadelen

 

-         Als je een van de speciale functies wil aanspreken, moet je heel de f*manual doorlezen, zowel op hardware als op software gebied.

-         Je moet een programmeertaal kennen ( C ).

-         Om een µC te programmeren is een stuk hardware nodig (de programmer) die specifiek is voor de µC die je gebruikt, alhoewel er voor veel geld al universele programmers zijn.

 

-         Het ‘grootste’ nadeel;

Een programma kan erg groot en complex worden, en dus moeilijk te begrijpen door anderen. Vooral bij automatisatie van processen in de industrie is het niet gewenst dat één iemand de machine kan programmeren/herprogrammeren, en de machine dus staat of valt bij deze ene persoon. Daarom gebruikt men in de industrie PLC’s (Programmable logic controllers) en hun bijbehorende visualisatie software. Zodat je in een virtuele omgeving een proces kan sturen, en men gemakkelijk het inzicht in het proces kan overdragen aan een ander persoon. Of met een team aan een proces kan werken.
(Maar eigenlijk werkt die PLC op zich ook weer met microcontrollers) ;-)

 

 

 



 

11.3.   Benodigdheden

 

Om een µC te gaan programmeren is er een en ander nodig. Zogenaamde Development Tools (Ontwikkelbenodigdheden)

 

 

11.3.1.   De Programmeeromgeving

 

Om het programma te kunnen schrijven, wordt gebruik gemaakt van een programmeeromgeving, zoals ‘IAR Embedded Workbench’ of wat ik voor de PIC gebruikte; ‘MPLAB IDE van Microchip’.

Deze software maakt het mogelijk om het geschreven programma te simuleren en te debuggen. Tevens is het handig, omdat er met kleuren onderscheid wordt gemaakt tussen de verschillende syntaxis. Ook is er een automatische regelummering.

 

Om de DS89c450 te programmeren, gebruikte ik dit eigenlijk niet. Ik maakte simpelweg gebruik van de Windows tekstedittor Notepad/Kladblok. Het nadeel is wel dat je soms lang kunt zoeken achter een punt/comma die ergens verkeerd staat in het programma. Notepad zal dit immers niet opmerken !

 

Zo’n omgeving is dus eigenlijk een slimme Notepad…(met vele nuttige opties)

 

 

 

 

11.3.2.   De header files

 

 

 

 

 

 

 

 

11.3.3.   De compiler

 

Het programma dat in ‘mensentaal’ is geschreven zal niet begrepen worden door de µC. Om dit toch verstaanbaar te maken, zal er een vertaling moeten gemaakt worden van mensentaal naar machinetaal. Dit omzetten noemt men compileren. Dit maakt het voor ons (mensen) een stuk eenvoudiger. Zo hoeven niet alle machine-instructies (op low level niveau) gekend te zijn.

Eens dat het programma is gecompileerd is het niet leesbaar meer voor (de meeste) mensen.

(Er kan op de machinecode nog wel een decompiler losgelaten worden, om zo stukken programma terug te proberen ontcijferen maar op die manier terug aan de broncode komen is eigenlijk illegaal…)

 

Als er een fout geschreven staat in het programma dan stopt de compiler met compileren. En geeft aan waar hij vasthangt. Daar in de buurt zit meestal de fout.

 

In dit Eindwerk maakte ik gebruik van twee C-compilers;

Voor de PIC’s gebruikte ik de BKND compiler van MPlab.
Voor de DS89c450 maakte ik gebruik van SDCC (Small Decice C Compiler)

 SDCC is een gratis compiler (onder DOS) te downloaden op http://sdcc.sourceforge.net/

 

Eens dit machinecode bestand aangemaakt meestal ‘*.hex’ genaamd kan dit naar de µC geschreven worden.

 

 

 

11.3.4.   Programmer Software

 

Om het programma naar de µC te schrijven is een ander programmaatje nodig dat de communicatie verzorgt tussen µC en de machinecode op de PC.

      Voor de PIC’s gebruikte ik de ‘WIN PIC Programmer’

Voor de DS89c450 gebruikte ik de MTK (MicroController Tool Kit) deze is van de fabrikant zelf.

 

Het programmeren van een µC verloopt tegenwoordig via seriële poort of USB.

In deze software kan ingesteld worden aan welke seriele poort de µC hangt en tegen welke snelheid naar de µC geschreven mag worden. (Baudrate)

 

Verder verloopt het seriële communicatieprotocol voor het uploaden van software automatisch.

 

 

 

 

11.3.5.   Programmer Hardware

 

Voor een goede communicatie tussen PC en µC moet de µC aangesloten zijn volgens de regels van de datasheet.

 

Omdat voor dit eindwerk twee soorten µC moeten geprogrammeerd worden, zijn er zoals eerder vermeld ook twee verschillende stukken hardware nodig.

 

Wat wel hetzelfde is bij beide schakelingen, is de klok. Net zoals bij de PC heeft een µC een kloksignaal. Dit bepaalt de werksnelheid in Mhz.  Alhoewel er al µC zijn met een interne klok.

De klok is een soort pulstrein. Deze kan worden opgewekt met een pulsgenerator. Maar meestal wordt er een kristal gebruikt met interne versterker/oscillator.

 

 

11.3.5.1.  Programmer Hardware voor de PIC

 

Voor het programmeren van de PIC’s maakte ik gebruik van de programmer die we in het begin van dit derde jaar hebben gemaakt in de lessen µC’s  bij  Mr. Wim Van Weyenberg.

De zogenaamde JDM (Jens Dyekjar Madsen) programmer.

 

11.3.5.1.1.  Het Schema

 

Schema (opgebouwd in Multisim)

 

11.3.5.1.2.  De print

 

3D design van de Printplaat

Achterkant van de Print

 

 

11.3.5.1.3.  De componenten (niet in totale kostprijs verrekend)

 

Component

Waarde

Aantal

 

prijs/stuk

totaal

weerstand

2k2

1

 

€ 0,10

€ 0,10

weerstand

4k7

2

€ 0,10

€ 0,20

weerstand

10k

1

€ 0,10

€ 0,10

weerstand

22k

1

€ 0,10

€ 0,10

weerstand

47k

1

€ 0,10

€ 0,10

condensator

100nF

2

€ 0,15

€ 0,30

diode

1N4007

1

€ 0,12

€ 0,12

diode

1N4148

2

€ 0,12

€ 0,24

transistor

BC557

1

€ 0,15

€ 0,15

spannings Reg.

7812

1

€ 0,45

€ 0,45

spannings Reg.

7805

1

€ 0,40

€ 0,40

IC voetje

18 pins

1

€ 0,50

€ 0,50

connector

DSUB9 FeM

1

€ 1,00

€ 1,00

printkroonsteen

2 pins

1

€ 0,65

€ 0,65

Printplaat

DZ

1

 

 

 

 

11.3.5.2.  Programmer voor de DS89c450

 

De Max3235 die te zien is onderaan in het scherm is een ‘RS232-tranceiver’. Deze zal het logische spanningsniveau van de seriële poort (+12v) omzetten naar een logisch spanningsniveau voor de µC (+5v) en omgekeerd.

 

De 47HC125 is een buffer, deze zal het logisch signaal bufferen.

 

 

 

 

11.3.5.2.1.  Het Schema

 

Schema (opgebouwd in Multisim)

 

 

 

 

 

 

 

 

11.3.5.2.2.  De Print

 

3D design van de Printplaat  (zonder koelvin)

Achterkant  Printplaat

 

 

 

 

 

11.3.5.2.3.  De Componenten

 

Component

Waarde

Aantal

 

prijs/stuk

Totaal

condensator

100nF

1

 

€ 0,15

€ 0,15

condensator

33pF

2

€ 0,15

€ 0,30

diode

1N4007

1

€ 0,12

€ 0,12

IC

74HC125

1

€ 0,50

€ 0,50

IC

Max 3235

1

€ free

€ free

µC

DS89c450

1

€ free

€ free

kristal

11 Mhz

1

€ 1,00

€ 1,00

IC Voetje

14 pins

1

€ 0,30

€ 0,30

IC Voetje

20 pins

1

€  0,50

€ 0,50

IC Voetje

40 pins

1

€ 0,90

€ 0,90

header

8 pins

4

 

€ 2,50

connector

DSUB9 Fe

1

€ 1,70 (school)

€ 1,70

printkroonsteen

2 pins

1

€ 0,65

€ 0,65

printplaat

EZ

 

 

 

 

Sub totaal =  € 8,62      Printplaatmateriaal wordt op einde gerekend

 

 

 

 

 

 

 

 

 

 

 

12.      De hoofd µC

 

 

12.1.   Waarom Dallas Maxim DS89c450

 

De reden dat ik voor deze µC koos, is eenvoudig. Deze heeft een groot genoeg I/0 bereik, en een redelijk intern geheugen, een seriële poort, maar vooral omdat hij gratis te sampelen is !

 

 

12.2.   Behuizingen

 

De microcontroller die ik gebruik zit in een DIP behuizing, maar is tevens verkrijgbaar in:

 

Plastic Dual Inline Package

Plastic Leaded Chip Carrier Package

Thin Plastic Quad Flatpack Package

 

 

 

 

 

 

 

12.3.  Aangesloten periferie

 

 

 


                             LCD                                                                           Multiplexer (steppers)

 

 

 

                     Lichtsluizen

 

 

                                                                                                                 Manuele Bediening

 

 

 

 

 

 

 

 

 

 

 

 

 

12.4.  Het programma

 

Op het moment van schrijven zit ik aan de 34ste versie van het hoofdprogramma. (opbouwend)

Voor hoofdstuk 15 (Extra’s) ben ik nog bezig aan seriële communicatie (interface – postprocessor), het kan zijn dat er hierdoor een iets afwijkende (hogere) versie in de µC komt te staan dan hier weergegeven.

 

Opm: Om alle twijfel te vermijden: Deze versie werkt prefect.

 

Programma geschreven in C  met    Notepad   &   SDCC Compiler

 

#include <string.h>

#include <stdio.h>

#include <stdlib.h> //voor functie "atoi" te kunnen gebruiken

//#include <8052.h>

#include <sdcc_reg420.h> // Special Function Register definitions file for;

                         // DS89C430/450 Ultra-High Speed 8051-compatible µCs

 

 

xdata char s[16];

char kar[16];

 

char e;     // besparing geheugen, toch nooit meer dan 255

char f;     // besparing geheugen, toch nooit meer dan 255

 

char X_String_waarde[5];

char Y_String_waarde[5];

 

char i=0;    // besparing geheugen, toch nooit meer dan 255

 

char n;

char b=0;

 

char Motor;

 

char SF;    // besparing geheugen, toch nooit meer dan 255    // Slow/Fast

 

bit LCDbit0, LCDbit1, LCDbit2, LCDbit3, LCDbit4, LCDbit5, LCDbit6, LCDbit7;

 

 

/////////////////////

 

 int Teller; // afvalteller motor X

 

signed int X_int_waarde;

signed int Y_int_waarde;

signed int X_prev_int_waarde = 0;

signed int Y_prev_int_waarde = 0;

 

 

 

 

 

 

void serial_init()

{

    EA = 0;              // Disable global interrupt mask

    T2CON = 0x34;             // Timer 2 in boud-Rate Generation Mode

    RCAP2L = 0xFA;            // Baud Rate

    RCAP2H = 0xFF;            // Baud Rate

    SCON0 = 0x50;           // Set SCI_0 to 8N1, Rx enabled

    ES0 = 1;                // Enable interrupts for SCI_0

    EA = 1;                   // Enable Global Interrupt

    //TI_0=1; // voor putchar;

}

 

 

 

 

 

void Delay(long snelheid) {

  long a;

  for (a=0;a<snelheid;a++);   

  //return;

}

 

 

void Sturing(char Motor,int Stappen)

{

  if (P2_6==0) {SF=1;} else {SF=10;}   //SF: Slow/Fast

 

  while (Stappen != 0) {  // Aantal stappen doen to '0'-waarde bekomen

 

    if (Motor=='X') {

         Teller=0; P0_2=1; //EN

         if (Stappen < 0 & P3_0==1) {

           P0_1=1; //Dir

           P0_0=0;    //CLK

           Delay(5);  //CLK

           P0_0=1;    //CLK

           Delay(500*SF); // effe wachten voor volgende stap

         }

         if (Stappen > 0 & P3_1==1) {

           P0_1=0; //Dir

           P0_0=0;    //CLK

            Delay(5);  //CLK

           P0_0=1;    //CLK

           Delay(5);  //CLK

           Delay(500*SF); // effe wachten voor volgende stap

         }

    }

    if (Motor=='Y') {

          if (Stappen < 0 & P3_2==1) {

           P0_4=1; //DIR

           P0_3=0;    //CLK

           Delay(5);  //CLK

           P0_3=1;    //CLK

           Delay(1000*SF); // effe wachten voor volgende stap

         }

         if (Stappen > 0 & P3_3==1) {

           P0_4=0; //Dir

           P0_3=0;    //CLK

           Delay(5);  //CLK

           P0_3=1;    //CLK

           Delay(1000*SF); // effe wachten voor volgende stap

         }

 

    }

    if (Motor=='Z') {

         if (Stappen > 0 & P3_5==1) {

           P0_6=1; //DIR

           P0_5=1;    //CLK

           Delay(5);  //CLK

           P0_5=0;    //CLK

           Delay(1500*SF); // effe wachten voor volgende stap

         }

         if (Stappen < 0 & P3_4==1) {

           P0_6=0; //Dir

           P0_5=1;    //CLK

           Delay(5);  //CLK

           P0_5=0;    //CLK

          Delay(1500*SF); // effe wachten voor volgende stap

         }

    }

  if (Stappen > 0) Stappen--;  //als het een positief getal is => Aftrekken tot 0 bekomen...

  else Stappen++;          //als het een negatief getal is => Optellen tot 0 bekomen...

  }

}

 

 

 

////////////////////////BRESENHAM///////////////////

 

void Bresenham(signed int ax, signed int ay, signed int bx, signed int by)

{

  signed int x = ax;

  signed int y = ay;

 

  signed int dx = (bx - ax);

  signed int dy = (by - ay);

 

  signed int sx = 1;  // besparing geheugen, toch nooit meer dan 255

  signed int sy = 1;  // besparing geheugen, toch nooit meer dan 255

 

   if (dx < 0)

   {

     sx = -1;

     dx = -dx;

 

   }

 

   if (dy < 0)

   {

     sy = -1;

     dy = -dy;

 

   }

 

   if (dy <= dx)

   {

     signed int c = 2 * dx;  //Bresenham hulpvariabele

     signed int m = 2 * dy;  //Bresenham hulpvariabele

     signed int d = 0;       //Bresenham hulpvariabele

 

     while (x != bx)

     {

       Sturing('X', sx);   //sx == +1 stap of -1 stap   //Sturing('Y', Y_int_waarde);

       x = x + sx;

       d = d + m;

      

       if (d > dx)

       {

         Sturing('Y', sy);   //sy == +1 stap of -1 stap

         y = y + sy;

         d = d - c;

       }

     }

   }

  

   else //(dy > dx)

   {

     signed int c = 2 * dy;  //Bresenham hulpvariabele

     signed int m = 2 * dx;  //Bresenham hulpvariabele

     signed int d = 0;       //Bresenham hulpvariabele

 

     while (y != by)

     {

       Sturing('Y', sy);   //sy == +1 stap of -1 stap

       y = y + sy;

       d = d + m;

      

       if (d > dy)

       {

         Sturing('X', sx);   //sx == +1 stap of -1 stap

         x = x + sx;

         d = d - c;

       }

     }

   }

}

/////////////////////////////////////////////////////

 

 

 

 

 

void LCD_Enable() { //inklokken data

  P1_3=1; Delay(2); P1_3=0; Delay(2);

}

 

 

void Line(int LineNr) {

 Delay(500);

  P1_2=0;

  if (LineNr==1) {

    P1_7=1; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

    P1_7=0; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

    Delay(300);

  }

  if (LineNr==2) {

    P1_7=1; P1_6=1; P1_5=0; P1_4=0; LCD_Enable();

    P1_7=0; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

    Delay(300);

  }

  P1_2=1; //terug in data mode

  Delay(500);

}

 

void Entry_Mode() {

  P1_2=0;

  P1_7=0; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

  P1_7=0; P1_6=1; P1_5=1; P1_4=0; LCD_Enable();

 

}

 

void OnOff_Control() {

  Delay(1000);

  P1_2=0;

  P1_7=0; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

  P1_7=1; P1_6=1; P1_5=1; P1_4=0; LCD_Enable();

}

 

void Function_Set() {

  P1_2=0;

  P1_7=0; P1_6=0; P1_5=1; P1_4=0; LCD_Enable();

  Delay(10000);

  P1_7=0; P1_6=0; P1_5=1; P1_4=0; LCD_Enable();

  P1_7=1; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

}

 

void Clear_Display() {

  Delay(100); //achteraf effe kijken of het nog wel gedaan wordt !

  P1_2=0;

  P1_7=0; P1_6=0; P1_5=0; P1_4=0; LCD_Enable();

  P1_7=0; P1_6=0; P1_5=0; P1_4=1; LCD_Enable();

}

 

 

void Lcd_Print_Char(char ASCII) { //ASCII = binair

  char twee=2;  // om integerdeling te verkrijgen

  LCDbit0 = ASCII % twee;

  LCDbit1 = (ASCII / twee) % twee;

  LCDbit2 = ((ASCII / twee) / twee) % twee;

  LCDbit3 = (((ASCII / twee) / twee) / twee) % twee;

  LCDbit4 = ((((ASCII / twee) / twee) / twee) / twee) % twee;

  LCDbit5 = (((((ASCII / twee) / twee) / twee) / twee) / twee) % twee;

  LCDbit6 = ((((((ASCII / twee) / twee) / twee) / twee) / twee) / twee) % twee;

  LCDbit7 = (((((((ASCII / twee) / twee) / twee) / twee) / twee) / twee) / twee) % twee;

  //printf("%d %d %d %d %d %d %d %d", LCDbit7, LCDbit6, LCDbit5, LCDbit4, LCDbit3, LCDbit2, LCDbit1, LCDbit0);

 

 P1_2=1; Delay(50);

 P1_7=LCDbit7; P1_6=LCDbit6; P1_5=LCDbit5; P1_4=LCDbit4; LCD_Enable();

 P1_7=LCDbit3; P1_6=LCDbit2; P1_5=LCDbit1; P1_4=LCDbit0; LCD_Enable();

}

 

 

 

 

void Interprete_Gcode()

{

 if (kar[0] == 'N')

 {

 

  f=0;

  e=0;

  i=0;

  X_int_waarde = 0;

  Y_int_waarde = 0;

 

    while (kar[e] != 'X') e++;

    e++;

    while (kar[e] != ' ')

    {

      X_String_waarde[f] = kar[e];

      f++;

      e++;

    }

    X_String_waarde[f] = '\0';

    f=0;

    e++;

    while (kar[e] != '\0')

    {

      Y_String_waarde[f] = kar[e];

      f++;

      e++;

    }

    Y_String_waarde[f] = '\0';

 

    X_int_waarde = atoi (X_String_waarde); //Ascii to Integer

    Y_int_waarde = atoi (Y_String_waarde);

 

 

   Line(2);

   sprintf(s, "In verwerking...\0");

   while (s[i]!='\0') {

     Lcd_Print_Char(s[i]);

     i++;

   }

   Line(1);

 

 

 

 

  if (X_int_waarde == 100) { 

    P1_0=1;

  }

    else P1_0=0;

 

 

   //Sturing('X', X_int_waarde);

   //Sturing('Y', Y_int_waarde);

 

   Bresenham(X_prev_int_waarde, Y_prev_int_waarde, X_int_waarde, Y_int_waarde);

// Bresenham(0,0,100,0);

 

   //P1_0=1;

 

   SBUF0 = 'v';  //Karakter op Seriele poort0 zetten

   Delay(99);

 

 

  X_int_waarde == X_prev_int_waarde; // huidige waarde bewaren in de vorige waarde

  Y_int_waarde == Y_prev_int_waarde; // dit om van coordinaat A => B een lein te kunnen trekken

 

  X_int_waarde == 0;

  Y_int_waarde == 0;

 

 

 

 

Clear_Display();

 

  }

}

 

 

 

 

void Receive_ASCII_from_Serial()

{

 //printf("X");

 kar[b] = n;

 if (kar[b] != 13) //13=Enter

  {

  Lcd_Print_Char(kar[b]);

  b++;

  }

 else

  {

  kar[b] = '\0';

  Interprete_Gcode();

  Clear_Display();

  b=0;

  }

}

 

 

 

 

void sci0ISR (void) interrupt 4 //using 1

{

 ES0 = 0;    // Disable Interrupt Serial Port0

 

    if (RI_0)

    {

      n = SBUF0;        // Save Rx byte

      Receive_ASCII_from_Serial();

      RI_0 = 0;           // Reser SCI0 RX int. flag

    }

    /*

    else if (TI_0)

    {

      SBUF0 = n;           // Load byte to Tx

      TI_0  = 0;           // Reset SCI_0 Tx interrupt flag

    }

    */

 

 TI_0 = 0; // DIT MOET ER ZEKER STAAN, HIER ZAT DE FOUT VAN TRAAG WERKEN !!!

 ES0 = 1;    // Enable Interupt Serial Port0

}

 

 

 

void main() {

 

PMR  |= 0x01; // Enable internal 1K SRAM

 

 P0=0;

 P1 = 0;

 P2 = 255;  //alle ingangen hoog maken ==>> Anders werkt gewoon niet !!! (definieren als ingang)

 //P0 = 255;  //bij Poort0 is dit eigenlijk niet nodig (interne Pullups???)

 

 Delay(10000);

 serial_init();

 

 SBUF0 = 'T';

 

/////////////////  LCD INITIALISATIE  /////////////////////////////////

 

 Function_Set();

 Clear_Display();

 OnOff_Control(); Delay(1000);

 

 Entry_Mode(); Delay(1000);

 

//////////////////////////////////////////////////////////////////////

 

 

Line(1);

 i=0;

 sprintf(s, "Thierry LOREYN\0");

 while (s[i]!='\0') {

     Lcd_Print_Char(s[i]);

     i++;

 }

 

 Line(2);

 i=0;

 sprintf(s, " test pest test\0");

 while (s[i]!='\0') {

     Lcd_Print_Char(s[i]);

     i++;

 }

 

//Sturing('X', 1000);

//Sturing('Y', 1000);

 

 

 

 

//Bresenham(0,0,100,0);

//Bresenham(0,0,-100,0);

 

 

 

 

 while(1) {

 

 

  Teller++;                            // Afvaltimer X-driver      

  if (Teller >= 32000) { Teller=0; P0_2=0;}  // afvallen X-driver (als tijdje niet gebruikt)

  if (P2_0==0 && P2_1==1) Sturing('X', -1); // X-Links

  if (P2_1==0 && P2_0==1) Sturing('X', 1); // X-Rechts

  if (P2_2==0 && P2_3==1) Sturing('Y', 1); // Y-voor

  if (P2_3==0 && P2_2==1) Sturing('Y', -1); // Y-Achter

  if (P2_4==0 && P2_5==1) Sturing('Z', -1); // Z-Op

  if (P2_5==0 && P2_4==1) Sturing('Z', 1); // Z-Neer

 

 

  if (SBUF0 == 'b') { 

    if (P1_0==0) P1_0=1;

    else P1_0=0;

  }

 

 

 }

}

 

 

 

13.      De Voeding

 

Uiteraard moet het geheel gevoed worden.

 

·        5volt DC

Dit is de voedingsspanning voor alle IC’s en µC’s.

Ook alle logische stuursignalen (behalve de seriële poort) werken op deze spanning.

 

·        12volt DC

Aansturing van de relais voor stofzuiger en boorkop.

De mosfets/transistoren die de motorwikkelingen aansturen werken op deze spanning, alsook de stappenmotoren zelf.

 

De stappenmotoren die ik hier gebruik zijn geen al te kleine motoren.

Een 12v voeding met een hoge stroom is dus nodig. Er moet per motor minstens 4,5A worden voorzien.

 

 

 

13.1.   ATX-voeding

 

Een ATX voeding is een PC voeding uit een desktop.

 

 

13.1.1.   Waarom ATX-voeding?

 

Niet alle ATX voedingen voldoen. Op de kenplaat moet vermeld staan dat ze minstens 12A kan leveren bij 12v. (vermelding; 250Watt is niet voldoende!)

Een voeding van minder dan 12A heb ik getest, maar werkt niet behoorlijk.

 

13.1.2.   De Voedingsconnector (molex)

 

De 5 en 12volt DC is op de connector terug te vinden, zoals aangegeven in onderstaande figuur.

 

13.1.3.   Soft power on

Een ATX computervoeding kan echter niet zomaar door de stekker in het stopcontact te steken aangezet worden. Normaal wordt de voeding opgezet door het moederbord van de PC met de ‘soft power on’ pin. Dit is de groene draad. Door de groene draad met een van de zwarte draden(GND) kort te sluiten zal de voeding opspringen.

 

 

14.      CNC (Computer Numerical Control)

 

CNC is in oorsprong ontwikkeld voor het Amerikaanse leger. Rond 1950-1953 is de ontwikkeling van CNC enorm toegenomen. Omdat er enorme vraag was naar supernauwkeurige wapensystemen, onderdelen van vliegtuigen, tanks, enz…

Dankzij de CNC konden niet enkel stukken gefreesd worden, maar ook; gelast, geboord, gesneden, gebogen,  gedraaid  en tegenwoordig met de lasertechniek zelf gesneden worden .

En dit alles met hoge precisie, snelheid, en volautomatisch.

 

 

Vroeger kon enkel een G-code programmeur machineinstructies schrijven.

Alle G-codes moesten hiervoor gekend zijn. In een volgend stadia werd er gebruik gemaakt van zogenaamde “dialoogsturing”, hierbij communiceert de programmeur met de machine in de zin van “Trek nu een lijn van daar naar daar” of “Maak een bocht met zoveel graden” of “Maak een cirkel met die straal en dat middelpunt”  op die manier hoeft men de achterliggende G-taal niet meer te kennen en begrijpen..

 

Tegenwoordig bestaan er hele vertalers, (waaronder de software die ik gebruik, namelijk KCAM).

Zo’n software pakket  kan tekeningen die gemaakt zijn in bijvoorbeeld Autocad(Mechanische tekeningen) omzetten in G-codes.

Verder kan de software ook gebruikt worden om de tekeningen van “Printplaat Design Software” zoals Multisim, Protel, enz… te vertalen naar G-Codes.

Er is zelfs mogelijkheid om een drill-file aan te maken, zodat de CNC machine de frees kan wegbrengen, een boortje gaan halen(Tool Switching), en vervolgens de gewenste gaatjes kan  boren.

 

 

Op die manier moet de gebruiker enkel nog maar kunnen werken met een teken programma.

 

De CNC-software is dus eigenlijk enkel begrensd door de eigen creativiteit, en uiteraard door het mechanisch ontwerp van de machine.

 

 

 

14.1.  KCAM

De besturing van de machine (assen, eindeloopschakelaars) gebeurdt door middel van de bestaande CNC software van “KellyWare”.

De versie die ik hier gebruik is  “ KCAM 4.0.24 ”

 

De software kan: baantjes trekken / tekenen / tekst graveren / boren / snijden(Polystyreen)

 

 

 

14.1.1.                    Waarom KCAM

 

Er zijn veel CNC verwerkingsprogramma’s op de markt, die tekeningen omzetten naar G-code.

Maar het unieke aan KCAM is dat deze de mogelijkheid bezit om via de parallelle poort  de “stap en richtingsgegevens” naar de buitenwereld te sturen !

 

 

 

 

 

 

14.1.2.   KCAM kalibreren.

 

Om met KCAM van start te gaan moeten er eerst een paar parameters aan de software meegegeven worden. De software moet uiteraard de specificaties van de freestafel kennen.

Dit moet eenmalig ingegeven worden. (De machine blijft immers dezelfde.)

 

 

14.1.2.1.  Freestafel parameters

 

AS

In te geven parameter

Mijn parameter

 

 

X

stappen/mm

22

as Lengte (mm)

420

terugdraaicompensatie (mm)

 

maximum snelheid

400

 

 

Y

stappen/mm

165

as Lengte (mm)

297

terugdraaicompensatie (mm)

 

maximum snelheid

1500

 

 

Z

stappen/mm

100

as Lengte (mm)

420

terugdraaicompensatie (mm)

 

maximum snelheid

9000

 

 

 

14.1.2.2.  Parallelle poort parameters

 

De poort stuurt gegevens uit ( Step / Dir / En ) ,maar heeft ook de mogelijkheid om inkomende gegevens te ontvangen. Dit wordt gebruikt voor de lichtsluizen.

 

 

14.1.2.2.1.  Output gegevens

 

AS

Actie

Poort

BIT  ≠  PIN

X

Step

&H378

0

X

Direction

&H378

1

X

Enable

&H378

2

Y

Step

&H378

3

Y

Direction

&H378

4

Z

Step

&H378

5

Z

Direction

&H378

6

 

14.1.2.2.2.  Input gegevens

 

AS

Actie

Poort

BIT  ≠  PIN

X

Limit Switch Min

&H379

3

Y

Limit Switch Min

&H379

4

Z

Limit Switch Min

&H379

5

 

 

 

14.1.2.3.  Andere parameters

 

Er zijn ook nog enkele andere parameters in te stellen naar keuze, deze worden hier niet besproken.

Zie handleiding (in bijlage op CD) of help-bestanden van de software.

 

     

 

 

14.2.  Andere leuke software

 

Op internet is nog verscheidene software te vinden voor G-code (meestal tegen betaling).

Hieronder twee leuke en gratis te downloaden pakketten.

 

 

14.2.1.   DeskEngrave

 

Met DeskEngrave kunnen eenvoudig strings in G-code omgezet worden, zonder dat hiervoor een teken pakket nodig is.

DeskEngrave is gratis te downloaden op de website van DesKAM  (http://www.deskam.com)

 

 

 

14.2.2.   DeskArt

 

Met DeskArt kan je foto’s importeren (BMP, JPEG, GIF, WMF, TIFF).

Zo kan je bijvoorbeeld een profielfoto van een persoon 3D uitfrezen.

(Eerst wordt de foto naar grijswaarden omgezet. Afhankelijk van het waardeverschil tussen zwart/wit zal de freesdiepte geregeld worden.)   Hieruit ontstaat het G-code bestand.

 

DeskArt is gratis(althans voor 30 dagen) te downloaden op de website van DesKAM  (http://www.deskam.com)

 

     

 

15.      Extra’s

 

 

 

15.1.  Optische ontkoppeling

 

 

15.1.1.   Wat

 

Een optische ontkoppeling is zoals de naam het al doet vermoeden een optische scheiding tussen  het ene deel van de schakeling en het andere deel van de schakeling.

Dit heeft als voordeel dat beide schakelingen niet elektrisch met elkaar in verbinding staan.

Ook wel ‘opto coupler’ of  ‘opto isolator’ genoemd.

 

Ik gebruik een optische ontkoppeling om de machine te scheiden van de PC (laptop). Normaal kan er niet veel fout gaan tijdens het uitwisselen van data (stuurgegevens) tussen computer en machine. Maar als het fout gaat is in het beste geval de parallelle interface van de PC kapot en in het slechtste geval heel het moederbord. (Daar de Parallelepoort van een PC niet kortsluitvast is).

 

 

 

15.1.2.   Hoe

Als de LED brandt, zal het afgegeven licht op de fotogevoelige transistor vallen.

Hierdoor zal de transistor in geleiding gaan. Als de transistor niet belicht wordt, zal deze in sper gaan. Dit alles zit in een IC’tje.

 

De IC die ik gebruik; de TLP504-A bezit er zo’n 4 in één behuizing.

 

 

 

 

 

15.1.3.   Werking

 

Om deze werkingswijze op de parallelle poort toe te passen, moet eerst de pinout van een parallelle poort even bestudeerd worden. (De pinout is terug te vinden in de bijlagen.)

 

Zoals te zien in de bijlage bevat de LPT poort input en output signaaldraden;

Op de Output poorten worden  de LED’s aangesloten.

Op de Input poorten worden de fotogevoelige transistoren aangesloten.

 

Net zoals de µC werkt de LPT poort met logische signalen tussen 0 en 5v DC, dus de principe- werking is gelijk aan deze van de lichtsluizen.

 

Uiteraard is er aan de andere kant (kant van de PC) ook een voeding noodzakelijk, hiervoor is een 9volt batterij voorzien met een spanningsstabilisator naar 5v.

 

Een gemeenschappelijke voeding (dus zonder batterij) zou dom zijn, daar er dan geen ontkoppeling ontstaat.

 

 

 

 

 

15.1.4.   Het schema

 

 

Schema (opgebouwd in Multisim)

 

 

 

 

 

Opm.:   In het oorspronkelijke schema ben ik vergeten een draad te trekken tussen de GND van de female SUBD connector en de GND van de 5v voeding (dit is in het rood aangeduid).

                Dus op het PCB is dit opgelost door een  draadbrug verbinding !

 

 

 

 

 

 

15.1.5.   De print

 

3D design van de printplaat (zonder bat houder)

Achterkant van de printplaat

 

 

 

 

 

 

 

 

 

15.1.6.   Gebruikte componenten.

 

Component

Waarde

Aantal

 

Prijs/stuk

Totaal

weerstand

390Ω

17

 

€ 0,10

€ 1,70

weerstand

10k Ω

17

€ 0,10

€ 1,70

photocoupler

TLP504-A

5

€ 1,50

€ 7,50

IC   Not poort

7404

3

€ 0,50

€ 1,50

spanningstabilisator

7805

1

€ 0,40 (school)

€ 0,40

batterij

9 volt

1

€ 6,00

€ 6,00

batterijhouder

9 volt

1

€ 2,90

€ 2,90

connector

25 SUBD M

1

€ 0,75 (school)

€ 0,75

connecor

25 SUBD F

1

€ 0,75 (school)

€ 0,75

printkroonsteen

2 pins

1

€ 0,65

€ 0,65

printplaat

DZ

1

 

 

 

Sub totaal =  € 23,85      Printplaatmateriaal wordt op einde gerekend

 

 

 

 

 

 

 

 

 

 

 

 

15.2.  Seriële aansturing (RS-232)

 

Bij seriële communicatie worden de bytes bit voor bit doorgestuurd, dit in tegenstelling met parallelle communicatie waar ze per byte naar buiten komen.

Het voordeel is dat er minder signaaldraden nodig zijn, omdat de acht bits over één kabel worden doorgestuurd.

Wat ook reduceert tot een lagere (koper) kostprijs.

 

Het nadeel is dat de data trager verstuurd wordt, omdat er telkens moet gewacht worden tot de gehele bitjestrein  binnen is via dat ene spoor.

 

Maar dit ‘trager zijn’ is met de hedendaagse kloksnelheden al heel snel.

 

De seriële poort heeft het dus van de parallelle gehaald.

 

Het USB protocol (Universal SERIAL Bus) is hiervan de (snellere) opvolger.

 

Het oudere RS-232 seriële protocol kan dus met een RS-232 naar USB adapter worden omgezet, zodat zelfbouwtoepassingen ook op de USB poort werken. 

 

De omzetting van parallel naar USB kan echter niet. Omdat het besturingssysteem dit herkent als een virtuele printerpoort, en niet als een  LPT poort.

Hierdoor kan de parallelle bus jammer genoeg niet via USB aangesproken worden.

 

Zo kwam de vraag of het mogelijk was de machine serieel te sturen.

 

 

15.2.1.   Serieel  KCAM 4 

 

In de bestaande software is seriële communicatie voorzien. (Die eventueel via USB kan werken.)
Deze optie werkt enkel met de controller van de fabrikant; ‘de MaxStepper’. Men moet dan in het softwarepakket aanvinken dat er met de MaxStepper word gewerkt. Deze µC kan verkregen worden bij kellyware voor $245 dollar. Wat er in die controller zit geeft de fabrikant niet vrij.

 

15.2.1.1.  MaxStepper

 

Dit is wel veel geld voor een 40pins chipje.

Door in de software aan te geven dat we met de MaxStepper werken, maar in wezen een andere computer met de seriële poort verbinden (ipv. de MaxStepper), kan er gezien worden wat de software zendt naar de µC. (Zie bijlage: De nullmodemkabel)

 

Normaal kan er dan op de andere PC een patroon vastgesteld worden voor elke CNC handeling.

Jammer genoeg communiceert de MaxStepper in twee richtingen met de software. De software kijkt of de MaxStepper  verbonden is. Er gebeurt een connectivity check.

 

Een buitenstaander kan echter niet weten hoe hierop gepast te antwoorden, maw. welke signalen er moeten teruggestuurd worden ter bevestiging van elke handeling.

 

Indien we dit zouden weten, kunnen we zelf het protocol afleiden, en hierop gepast reageren (om niet te zeggen namaken).

 

Dus deze optie (seriële communicatie met de MaxStepper) valt uit de boot, en is niet verder onderzocht.

 

 

15.2.1.2.  Eigen CNC software

 

Om dan toch tegemoet te komen om iets serieel te communiceren is er enkel nog maar de mogelijkheid om zelf een gehele interface + postprocessor te gaan schrijven.

 

Dit wil zeggen;

 

·        eigen software op de PC    (interface)

Deze moet G-codes van een tekenpakket of cad-programma kunnen verzamelen, en vervolgens bit per bit serieel naar de µC doorsturen.

 

·        Eigen G-code verwerkingssoftware in de µC   (PostProcessor)

Deze moet de ontvangen G-codes bevestigen, en vervolgens de code verwerken tot CNC machine instructies.

 

Omdat deze twee stukken software zó groot en wiskundig complex (parabolische functies, vectorberekeningen; om cirkels, ellipsen en krommen te frezen) uitvallen is het niet haalbaar om dit als bijkomstig extra-tje even te schrijven.

(Dit is een eindwerk op zichzelf)

 

Wat ik wel nog geschreven heb is een vereenvoudigde versie om rechte lijnen te frezen.

Dit kan later nog uitgebreid worden om eventueel krommen te graveren !

Het is dan ook een extra-tje.

 

PS:    Om alle twijfels te voorkomen: De machine werkt volledig (alle G-codes) met de bestaande software van KCAM !

 

 

15.2.1.2.1.  Principe werking tussen interface en postprocessor.

 

Hieronder is de onderlinge communicatie tussen interface en postprocessor schematisch weergegeven. Merk op dat bij werken met de interface (PC) , de post processor (µC) geďnterupteerd wordt.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


                                                                        RS-232  Serial Protocol

 

 

 

 


Het programma en de nodige initialisatie voor de seriële poort,

en de seriële interuptverwerking is terug te vinden in hoofdstuk 12.

 

Met Periferie wordt bedoeld: Toutchprint, LCD-scherm, Lichtsluizen en Stapenmotordrivers

15.2.1.2.2.  Interface

 

De taak van de interface is code ophalen uit een G-code bestand van een teken pakket, en deze doorsturen naar de post processor.

 

Dit doen we met Visual Basic.

 

Dit programmaatje heeft uiteraard niet veel rekenkracht nodig. Het enige wat het moet doen, is het G-code bestand openen en byte per byte (ASCII) doorsturen naar de postprocessor, en vervolgens wachten op een verwerkingsbevestiging, alvorens de volgende code te sturen.

 

Omdat de volledige verwerking in de µC (postprocesor) gebeurd, kan dit programma perfect op de achtergrond draaien, zonder dat de PC hiermee belast wordt.

 

De code is hieronder terug te vinden.  (Om de code goed te begrijpen kan men refereren naar het schema op blz. 78.)

 

Interface geschreven in Visual Basic

 

Option Explicit

'Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Dim n As Integer

 

Private Sub Form_Load()

  Dim Bestand As String

    Bestand = App.Path

    If Right$(Bestand, 1) <> "\" Then Bestand = Bestand & "\"

    Bestand = Bestand & "code.txt"

    Text1.Text = Bestand

   

    MSComm1.CommPort = 1

    MSComm1.Settings = "57600,n,8,1"

    MSComm1.PortOpen = True

   

  MSComm1.DTREnable = False

  Sleep (500)

  Send_Serial_String ("Serial Interface")

End Sub

 

 

Private Sub Wacht_Verwerkings_Bevestiging()

  Do Until MSComm1.Input = "v"

  DoEvents

  Loop

End Sub

 

 

Private Sub Send_Serial_String(Lijn_Tekst As String)

Dim i As Integer

Dim ascii

    Label3.Caption = ""

    MSComm1.Output = Chr$(13) '== clear LCD

    Sleep (2)

   

    For i = 1 To Len(Lijn_Tekst)

        ascii = CStr(Mid(Lijn_Tekst, i, 1))

        Label3.Caption = Label3.Caption + ascii

        MSComm1.Output = ascii

        Sleep (2)

        DoEvents

    Next

    Label3.Caption = ""

End Sub

 

 

 

 

Private Sub StuurCode_Click()

  Dim Lijn_Nr As Integer

  Dim Lijn_Tekst As String

 

    n = 1

    'MSComm1.Output = Chr$(13) '== clear LCD

    'Sleep (2)

    List1.Clear

 

    Lijn_Nr = FreeFile

    Open Text1.Text For Input As Lijn_Nr

    Do While Not EOF(Lijn_Nr)

        Text3.Text = n

        Line Input #Lijn_Nr, Lijn_Tekst

        List1.AddItem Lijn_Tekst

        Call Send_Serial_String(Lijn_Tekst)

        Sleep (400) 'Dan komt de text "In Verwerking..." net iets later op het LCD (mooier)

        MSComm1.Output = Chr$(13) '== einde van de "N. ... ..." string

        Sleep (2)

        'Label3.Caption = ""

        Call Wacht_Verwerkings_Bevestiging

        n = n + 1

       

        'Sleep (20)

    Loop

    List1.Clear

    Send_Serial_String ("Done... Groetjes")

End Sub

 

 

 

 

 

 

Private Sub Form_Unload(Cancel As Integer)

    MSComm1.PortOpen = False

   

End Sub

 

 

 

Private Sub Text2_Change()

    Send_Serial_String (Text2)

End Sub

 

Private Sub X1_Click()

    Send_Serial_String ("N X-100 Y0")

    MSComm1.Output = Chr$(13) '== einde van de "N. ... ..." string

End Sub

 

Private Sub X2_Click()

    Send_Serial_String ("N X100 Y0")

    MSComm1.Output = Chr$(13) '== einde van de "N. ... ..." string

End Sub

 

Private Sub Y1_Click()

    Send_Serial_String ("N X0 Y100")

    MSComm1.Output = Chr$(13) '== einde van de "N. ... ..." string

End Sub

 

Private Sub Y2_Click()

    Send_Serial_String ("N X0 Y-100")

    MSComm1.Output = Chr$(13) '== einde van de "N. ... ..." string

End Sub

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

15.2.1.2.3.  PostProcessor

 

Zoals eerder vermeld heeft een postprocessor de taak om de ontvangen G-code van de interface om te zetten in mechanische beweging.

Stel dat we een G-code aanbieden die coördinaten moet doorlopen zoals in onderstaande figuur. (van A naar B)

 

Geval 1

Geval 2

Geval 3

Voor de eenvoudigheid stellen we dat tussen één eenheid (één vakje) 100 stappen liggen, in werkelijkheid is dit niet zo, en hebben de 3 assen een andere eenheidsstapgrootte.

 

-          Bij geval 1 zal enkel motorX 300 stappen naar links moeten nemen.

-          Geval 2 is gelijkaardig aan geval 1, maar hier is het motorY die moet werken.

 

Neen:   Hiervoor gaan we eerst even terug naar de “steentijd” van de computertechniek.

In die tijd hadden procesoren nog geen brute rekenkracht zoals nu. Echter wou men wel rechte lijnen kunnen tekenen op een monitor (om zo figuren en karakters te maken).

Zware wiskundige formules voor oa. het berekenen van een richtingscoëfficiënt, zou te veel rekenkracht vergen. In de jaren 60 werd voor deze berekening een eenvoudigere methode  gevonden door dhr. Jack Bresenham (Programmeur bij IBM die de grafische routines schreef voor een grafische kaart).

Later noemde men deze methode “het Bresenham algoritme”.

Dit Algoritme wordt nu, ruim 40 jaar later nog steeds gebruikt om grafische LCD’s aan te sturen. (zoals te zien op de foto hiernaast)

 

 

15.2.1.2.3.1.  Hoe werkt het Bresenham algoritme? (principe)

 

Eerst wordt bepaald of de hoek van de te teken lijn groter of  kleiner is dan 45°.

Dit kan eenvoudig door:

-          dx = bx – ax

-          dy = by – ay

-          als  (dy <= dy)     dan zitten we onder de 45°

als  (dy   >  dx)     dan zitten we boven de 45°

 

Vervolgens worden de X waarden (X-as) doorlopen. Bij elke X-waarde wordt gekeken of de Y-waarde verhoogd moet worden tov. de vorige waarde. (de Y-waarde wordt pas verhoogd als de afwijking tussen de berekende Y-waarde en de te tekenen pixel groter geworden is dan ˝ pixel.)

 

Ook wordt de oriëntatie van de lijn bepaald om te kijken of de Y waarden moeten worden bijgeteld of afgetrokken. (zo kan men ook in de andere kwadranten een lijn gaan tekenen.)

Dit doet men door te controleren van:  (dx < 0) en/of (dy < 0)

Opm.:   Boven de 45° geld hetzelfde principe, enkel is het nu nauwkeuriger om de Y waarden te doorlopen, en de X waarden te verhogen/verlagen.

 

Dit principe gebruikte ik (mits een beetje aanpassing) om rechte lijnen te kunnen graveren…

Het geschreven programma is terug te vinden in hoofdstuk 12.


.

 

 

 

 

 

 

 

 

 

 

 

Bijlagen

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Opm.:   Datasheets en handleidigen zijn niet terug te vinden in de bijlagen, deze zijn terug te vinden op het internet of op de bijgevoegde CD-ROM.

 

 

 

I.      De prints  (Op ware grootte)

 

 

Step Driver 1

 

 

 

 

 

Step Driver 2

 

           

 

 

 

 

 

Logica Step Driver 2

                         

 

 

 

 

Step Driver 3

 

 

 

 

 

Logica Step Driver 3

 

              

 

 

 

 

 

Switch X Y Z

           

 

 

 

 

µC Board

 

 

 

 

 

Multiplexer

 

 

 

 

 

 

Toutch Switch

 

 

 

 

Dimmer

 

   

 

 

 

 

 

Nulmodem

 

           

 

 

 

 

 

 

 

 

 

LPT-Photocoupler  (extra)

 

Copper top  (Bovenkant PCB)

Copper Bottom (Onderkant PCB)

 

 

 

   

 

 

          

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

II.      ASCII tabel

 

 

 

 

III.      ASCII tabel voor LCD driver

 

(Tabel afkomstig uit datasheet van een Hitachi LCD controller)

 

IV.      Parallelle poort (LPT) 

 

LPT staat voor Line Printer Terminal

 

Pin

Functiel

I/O

Bit

Geďnverteerd

1

Strobe

O

Control Bit 0

Ja

2

Data 0

0

Data Bit 0

nee

3

Data 1

0

Data Bit 1

Nee

4

Data 2

0

Data Bit 2

Nee

5

Data 3

0

Data Bit 3

Nee

6

Data 4

0

Data Bit 4

Nee

7

Data 5

0

Data Bit 5

Nee

8

Data 6

0

Data Bit 6

Nee

9

Data 7

0

Data Bit 7

Nee

10

Acknowlege

I

Status Bit 6

nee

11

Busty

I

Status Bit 7

Ja

12

Paper-out

I

Status Bit 5

Nee

13

Select

I

Status Bit 4

Nee

14

Linefeed

0

Control Bit 1

Ja

17

Error

I

Status Bit 3

Nee

16

Init/reset

0

Control Bit 2

Nee

17

Select

0

Control Bit 3

Ja

18-25

GND

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

V.      Null-modem (met handshaking)

 

Met dit printje kunnen er twee computers met elkaar verbonden worden via seriële poort.

Met het programma HperTerminal kunnen dan beide PC’s met elkaar communiceren.

Op die manier kan een µC gesimuleerd worden, zodat er kan nagegaan worden of het   communicatieprotocol goed functioneert. (Gebruikt tijdens het schrijven van de software)

 

     

Schema (opgebouwd in Multisim)

 

Connector 1

Connector 2

Function

2

3

Rx ← Tx

2

2

Tx → Rx

4

6

DTR → DSR

5

5

GND ↔GND

6

4

DSR ←DTR

7

8

DTS →CTS

8

7

CTS ←RTS

 

 

 

VI.      Bresenham testjes

 

Hieronder staan enkel testjes die ik heb gemaakt om het algoritme beter te begrijpen.

 

Opm.   Hoe kleiner de vakjes (pixels of in mijn geval stapgrootte) hoe nauwkeuriger de benadering.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

VII.      Enkele G-codes voor freesmachines

 

G-Code

actie

G00

 Positioning in Rapid

G01

 Linear Interpolation

G02

 Circular Interpolation (CW)

G03

 Circular Interpolation (CCW)

G04

 Dwell

G07

 Imaginary axis designation

G09

 Exact stop check

G10

 Program parameter input

G11

 Program parameter input cancel

G12

 Circle Cutting CW

G13

 Circle Cutting CCW

G17

 XY Plane

G18

 XZ Plane

G19

 YZ Plane

G20

 Inch Units

G21

 Metric Units

G22

 Stored stroke limit ON

G23

 Stored stroke limit OFF

.

 .

.

 .

G27

 Reference point return check

G28

 Automatic return to reference point

G29

 Automatic return from reference point

G30

 Return to 2nd, 3rd, 4th reference point

G31

 Skip function

.

 .

G33

 Thread cutting

G34

 Bolt hole circle (Canned Cycle)

G35

 Line at angle (Canned Cycle)

G36

 Arc (Canned Cycle)

G40

 Cutter compensation Cancel

G41

 Cutter compensation Left

G42

 Cutter compensation Right

G43

 Tool Length Compensation (Plus)

G44

 Tool Length Compensation (Minus)

G45

 Tool offset increase

G46

 Tool offset decrease

G47

 Tool offset double increase

G48

 Tool offset double decrease

G49

 Tool Length Compensation Cancel

G50

 Scaling OFF

G51

 Scaling ON

G52

 Local coordinate system setting

G53

 Machine coordinate system selection

G54

 Workpiece Coordinate System

G55

 Workpiece Coordinate System 2

G56

 Workpiece Coordinate System 3

G57

 Workpiece Coordinate System 4

G58

 Workpiece Coordinate System 5

G59

 Workpiece Coordinate System 6

G60

 Single direction positioning

G61

 Exact stop check mode

G62

 Automatic corner override

G63

 Tapping mode

G64

 Cutting mode

G65

 Custom macro simple call

G66

 Custom macro modal call

G67

 Custom macro modal call cancel

G-Code

actie

G68

 Coordinate system rotation ON

G69

 Coordinate system rotation OFF

G70

 Inch Units

G71

 Metric Units

G72

 User canned cycle

G73

 High-Speed Peck Drilling Cycle

G74

 Counter tapping cycle

G75

 User canned cycle

G76

 Fine boring cycle

G77

 User canned cycle

G78

 User canned cycle

G79

 User canned cycle

G80

 Cancel Canned Cycles

G81

 Drilling Cycle

G82

 Counter Boring Cycle

G83

 Deep Hole Drilling Cycle

G84

 Tapping cycle

G85

 Boring Cycle

G86

 Boring Cycle

G87

 Back Boring Cycle

G88

 Boring Cycle

G89

 Boring Cycle

G90

 Absolute Positioning

G91

 Incremental Positioning

G92

 Reposition Origin Point

G93

 Inverse time feed

G94

 Per minute feed

G95

 Per revolution feed

G96

 Constant surface speed control

G97

 Constant surface speed control cancel

G98

 Set Initial Plane default

G99

 Return to Retract (Rapid) Plane

.

.

.

.

.

.

.

.

.

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Deze G-code tabel voor een CNC freesmachine is afkomstig van:

http://www.cncezpro.com/gcodes.cfm

 

Opm:    Als dit een elektronische versie is, kunt u op de blauwe code drukken om een visueel beeld te krijgen van wat de code doet.

 

 

  VIII.      G-code voorbeeld (voor freesmachines)

 

In de onderstaande figuur is de letter “ H ” te zien, en de bijbehorende G-code om deze te graveren op een CNC machine.

 

G-code gegenereerd met Desk Engrave.   (Uiteraard kan je ook zelf je G-code schrijven)

 

 

 

G-code

G90 T0 F700,0           

N0 G00 Z2,0

N1 G00 X1,6 Y5,1

N3 G01 Z-0,1 F5000,0

N4 F700,0

N5 X8,0 Y5,1

N6 G00 Z2,0

N7 G00 X1,6 Y9,4

N9 G01 Z-0,1 F5000,0

N10 F700,0

N11 X1,6 Y0,4

N12 G00 Z2,0

N13 G00 X8,0 Y9,4

N15 G01 Z-0,1 F5000,0

N16 F700,0

N17 X8,0 Y0,4

N18 G00 Z2,0

 

Verklaring:

 

N      =    Regelnummer

G90  =    Coördinaatstelsel:  absolute positionering ≠ relatieve positionering

G00  =    Snelle rechtlijnige bewegingen, wordt gebruikt om snel naar positie te gaan zonder

materiaal te verspanen.

G01  =    Lineaire beweging van A naar B, wordt gebruikt om materiaal te verspanen met een

lineaire beweging.

F       =    bewegingssnelheid

 

IX.      Tools

 

 

 

1)      Ledjesbox

 

Dit tooltje is handig gebruikt tijdens het testen van de software, om te zien dat de software wel de gewenste signalen naar de buitenwereld stuurde.

 

 

 

 

 

 

2)      LED-testboard

 

Dit tooltje is handig gebruikt voor het testen van logische signalen tussen 0 en 5v DC.

 

 

 

 

 

 

3)      LPT-testboard

 

Dit tooltje is gebruikt tijdens het ontwikkelen en testen van de stappenmotor drivers.

Hiermee kunnen de afzonderlijke pinnen van de LPT-connector verbonden worden met draadjes naar de stappenmotor testschakeling (op breadboard).

 

 

                 X.      Kostprijs

 

·        Kostprijs mechanisch            Recuperatie   € 0,00

 

 

 

 

 

·        Kostprijs elektrisch                   Subtotaal =  +/- € 260

 

 

Toebehoren

Totaal

printontwerp Motor X

€ 60,46

printontwerp Motor Y

€ 34,42

printontwerp Motor Z

€ 49,59

LCD

€ 13,70

printontwerp Multiplexer

€ 6,36

printontwerp Manuele bediening

€ 2,45

printontwerp One-touch-schakeling

€ 16,67

printontwerp Dimmer

€ 5,45

lichtsluizen

€ 7,50

printontwerp hoofd µC

€ 8,62

printontwerp optische ontkoppeling

€ 23,85

Printplaatmateriaal + Bedrading

€ 30,00

 

      ( + Voeding  € 23 )

 

 

 

·        Kostprijs werkuren               Onbetaalbaar

 

 

 

 

 

 

Opm:    De huidige motoren (uit recyclage) zijn niet krachtig genoeg om

            zware materialen te verspanen.

 

            De motoren zouden vervangen moeten worden.

            Liefst door stappenmotoren die een koppel kunnen

            leveren van meer dan 5 Nm.  (wat al heel wat is)

           

            Krachtige stappenmotoren kosten veel geld…

 

              +/- € 200 * 3D      =     +/- €600

 

           

 

 

XI.      Eindwerk Agenda

 

Opm.:   Van eind september tot begin december heb ik tussentijds aan de mechanische constructie gewerkt + ontwerp van de eerste stappenmotorschakeling (X-AS)

 

Week 1

 

Dag

Datum

Activiteit

maandag

28/01/2008

Uitzoeken stappenmotor schakelingen met transistoren en mosfets

dinsdag

29/01/2008

Testen op breadboard van de stappenmotorschakelingen

woensdag

30/01/2008

Programmeren van de logica voor stappenmotoren

donderdag

31/01/2008

Ontwerpen PCB van de stappenmotordriver Z-AS + solderen / testen

vrijdag

01/01/2008

Ontwerpen PCB van de stappenmotordriver Y-AS + solderen

zaterdag

02/02/2008

Monteren van de motoren + bevestigen aan assen.

Oplossing zoeken voor het haperen van de motoren.

zondag

03/02/2008

 

 

Week Extra (Krokus vakantie)

 

Dag

Datum

Activiteit

maandag

04/02/2008

 Vakantie:

    Vervangen van de Schroefdraad door inox schroefdraad

-         Y-AS

-         Z-AS

   Montage aangepast door kogellagers ipv. wrijvingslagers

   Montage van de X+Z driver op plexi.

   Plexi monteren op de machine met scharnieren.

dinsdag

05/02/2008

woensdag

06/02/2008

donderdag

07/02/2008

vrijdag

08/02/2008

zaterdag

09/02/2008

zondag

10/02/2008

 

 

Week 2

 

Dag

Datum

Activiteit

maandag

11/02/2008

PCB design: µC Board DS89cxxx   etsen + solderen

PCB design: Logica Step Driver 3   etsen + solderen

dinsdag

12/02/2008

Bedraden motor + Testen PCB; Logica Step Driver 3

woensdag

13/02/2008

Schrijven van software voor µC om XYZ bewegingen te doen met de touchprint

donderdag

14/02/2008

vrijdag

15/02/2008

zaterdag

16/02/2008

Monteren scharnieren op plexi / Monteren PCB op plexi /

 

zondag

17/02/2008

 

 

Week 3

 

Dag

Datum

Activiteit

maandag

18/02/2008

Trekken van draden naar de motoren  +  lichtsluizen

dinsdag

19/02/2008

Mooi vastleggen van draden + schrijven software voor lichtsluizen

woensdag

20/02/2008

LCD: Uitzoeken van de werking

donderdag

21/02/2008

LCD: Schrijven van software voor karakters weer te geven

vrijdag

22/02/2008

LCD: Schrijven software voor strings + onderste lijn

zaterdag

23/02/2008

Niets

zondag

24/02/2008

 

 

 

Week 4

 

Dag

Datum

Activiteit

maandag

25/02/2008

Vinnen maken voor lichtsluizen + draden LCD

dinsdag

26/02/2008

LCD problemen: uitzoeken problemen + opzoeken werking dimmer

woensdag

27/02/2008

Maken van PCB voor dimmer + solderen / testen

donderdag

28/02/2008

Ontwerpen One-Touch op breadboard voor dremel / stofzuiger

vrijdag

29/02/2008

PCB On-Touch-print; tekenen / etsen / solderen /testen

zaterdag

01/03/2008

Monteren onderste lichtsluizen + plaatsing zijpanelen / stopcontacten

zondag

02/03/2008

Eerste testen op een blokje hout

 

 

 

 

Week 5

 

Dag

Datum

Activiteit

maandag

03/03/2008

Bedraden + aansluiten One-Toutch-print

dinsdag

04/03/2008

Maken nieuwe (betere) One-Touch-print op breadboard + tekenen PCB

woensdag

05/03/2008

Solderen / testen + monteren

donderdag

06/03/2008

 

vrijdag

07/03/2008

Verhuizen van materiaal naar boven B201

zaterdag

08/03/2008

Maken van het frontpaneel

zondag

09/03/2008

 

 

 

 

Week 6

 

Dag

Datum

Activiteit

maandag

10/03/2008

 

Uitzoeken van seriële communicatie met µC

Schrijven van een interface om G-code door te zenden naar de µC.

Schrijven van software in de µC om G-codes te ontvangen

dinsdag

11/03/2008

woensdag

12/03/2008

donderdag

13/03/2008

vrijdag

14/03/2008

zaterdag

15/03/2008

zondag

16/03/2008

 

 

 

 

Week 7

 

Dag

Datum

Activiteit

maandag

17/03/2008

 

Uitzoeken van seriële communicatie met µC

Schrijven van een interface om G-Code door te zenden naar de µC.

Schrijven van software in de µC om G-codes te ontvangen

dinsdag

18/03/2008

woensdag

19/03/2008

donderdag

20/03/2008

vrijdag

21/03/2008

zaterdag

22/03/2008

Maken van een spanplaat

zondag

23/03/2008

 

 

 

Paasvakantie

 

Dag

Datum

Activiteit

maandag

24/03/2008

 

 

 

 

   Maken van scriptie

dinsdag

25/03/2008

woensdag

26/03/2008

donderdag

27/03/2008

vrijdag

28/03/2008

zaterdag

29/03/2008

zondag

30/03/2008

maandag

31/03/2008

dinsdag

01/04/2008

Ontwerpen optische koppeling op breadboard

woensdag

02/04/2008

PCB tekenen voor optische ontkoppeling LPT poort

donderdag

03/04/2008

PCB etsen (op school) / solderen  / testen

vrijdag

04/04/2008

niets

zaterdag

05/04/2008

 

Maken van scriptie

zondag

06/04/2008

 

Opm.:   Na de paasvakantie ben ik tot het einde van het jaar bezig geweest met de seriële communicatie, interface/postprocessor, en alles wat daar rond hangt. (als extra-tje)

 

 

 

 

 

 

 

 

Belangrijke Data

 

Dag

Datum

Activiteit

vrijdag

21/03/2008

Einde stageperiode

vrijdag

11/04/2008

Afgeven scriptie (eerste versie)

woensdag

21/05/2008

Afgeven scriptie (definitieve versie)

donderdag

19/06/2008

Eindverdediging (jury)

 

 

 

 

 

 

 XII.      Voor geďnteresseerden

 

Foto’s van de opbouw zijn terug te vinden op:      

 

http://eindwerk.loreyn.be                                                                            (zolang de server online is)

 

 

 

 

E-mail: thierry@loreyn.be